我正在测试一个产品折扣为10%的系统,这意味着折扣为102.555,但是该系统仅使用2个小数位,因此它给出了102.55。

问题是如果我执行此操作:

Math.Round(102.555, 2, MidpointRounding.AwayFromZero)


输出为:102.56

如果执行此命令:

Math.Round(102.555, 2, MidpointRounding.ToEven)


输出也是102.56。

我在所有情况下都使用Math.Round方法,直到出现这种情况。
我究竟做错了什么?

为什么102.555使用MidpointRounding.AwayFromZero返回102.56?

我该怎么做才能从102.555返回102.55?

最佳答案

为什么102.555使用MidpointRounding.AwayFromZero返回102.556?


我假设“ 102.556”在此处应为“ 102.56”。

因为MidpointRounding表示在四舍五入以基数10进行四舍五入的有效数字(即最后一个消失的数字)为5的数字时会发生什么。您的数字102.555就是这种情况,因此在四舍五入到小数点后两位时,有两个选项:


102.55
102.56


MidpointRounding.AwayFromZero选择距离零更远的选项-在这种情况下(因为它们是正数),较大的选项即102.56

关于c# - 如何将102.555舍入为102.55?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41702421/

10-13 09:32