C# 我怎样才能把数字向上取整而不是向下取整?

C# 我怎样才能把数字向上取整而不是向下取整?,c#,C#,我正在进行一些计算,并将结果插入数据库 我的问题是,我得到的答案似乎是向下取整,而不是向上取整。这似乎并不重要,但在大量销售过程中,美分开始累积 Decimal pubCut = rrp * (percentageCutD / 100); Decimal retCut = rrp * retailerCut; Decimal edcut = rrp * edpercentage; 老实说,我对数字一窍不通,整个数学函数都是我在大学里试图避免的。有谁能告诉我如何才能使这些数字向上取整,而不是向下

我正在进行一些计算,并将结果插入数据库

我的问题是,我得到的答案似乎是向下取整,而不是向上取整。这似乎并不重要,但在大量销售过程中,美分开始累积

Decimal pubCut = rrp * (percentageCutD / 100);
Decimal retCut = rrp * retailerCut;
Decimal edcut = rrp * edpercentage;

老实说,我对数字一窍不通,整个数学函数都是我在大学里试图避免的。有谁能告诉我如何才能使这些数字向上取整,而不是向下取整?

你的问题是

(percentageCutD / 100)
由于100是整数,它将执行整数除法,因此150/100变为1。您可以通过确保100是一个小数来解决这个问题,因为您希望最后得到一个小数。将代码更改为

(percentageCutD / 100D)
但是,如果您总是希望将值舍入到1.1到2之间,则必须使用
Math.天花
来完成此操作。如果出于某种原因希望避免使用
数学类(我不明白为什么要这样做),可以在结果中添加1并将其强制转换为
int
,以有效地将其四舍五入到最接近的整数。

使用方法


你输入的百分比可能不会增加到100%。通过从总数中减去其他分数的总和来计算一个分数

var v = 100D;
var p1 = 33D/100;
var p2 = 33D/100;
var p3 = 33D/100;
var v1 = p1*v;
var v2 = p2*v;
var v3 = p3*v;
var sum = v1 + v2 + v3;
不幸的是,
sum
是99,而不是100

您可以这样计算
v3

var v3 = v - (v1 + v2);

或者更好地修复传入百分比中的舍入错误:

.Net的Math.Round函数使用通常称为银行家舍入的方法,将.5舍入到最接近的偶数整数,即22.5=22和23.5=24。这在舍入时提供了更均匀的分布


同样值得注意的是,SQL server没有使用四舍五入的方法。请你把
rrp
percentageCutD
retailerCut
edpercentage
的类型公布出来好吗?抱歉,它们都是十进制的。“整个数学函数都是我在大学里试图避免的。”.如果是那样的话,回到大学,因为这种知识的缺乏将在你的工作生涯中困扰你。你的问题似乎意味着C#将总是四舍五入,而事实上C#将做得“适当”向上舍入或向下舍入到最接近的整数。舍入问题不一定总是通过向上舍入来解决,如果您的问题是部分加起来不等于全部,则向上舍入可能会引入一个新问题,即部分加起来大于全部。@Øyvind Brå然后-只有在
percentageCutD
也是一个整数。就目前而言,问题中没有足够的信息。如果percentageCutD是double或decimal类型,那么除法将是精细的,然后使用Math.天花板()进行四舍五入:)我只是假设它是一个整数,因为OP说它是四舍五入的,而他根本没有编写任何代码进行四舍五入或四舍五入。所以我的假设是,这里有一个整数除法。但我当然可能错了。OP可以证实这一点。percentageCutD是Decimal类型。我将使用Math.天花板()。谢谢你的回复。
var v3 = v - (v1 + v2);