[英].NET Math.Round(<double>,<int>,MidpointRounding.AwayFromZero) not working correctly
[英]How to round off correctly with NET Math.Round(<decimal>,<int>,MidpointRounding.AwayFromZero)
在.NET中,为什么System.Math.Round(27.2351, 2, MidpointRounding.AwayFromZero)
产生27.24
而不是27.23
?
第三位数字为5,因此我们检查第四位数字是否小于5,因此结果应为27.23
有什么办法可以得到这个结果。
请参阅我的问题:
我的金额为2013.86,税金为7%。 现在是2013.86的7%= 140.97
但是这2013.86是我的总额。
详细信息如下:
Amount Tax Tax Value in 2 decimals by Math.Round 718.37 7% 50.29 496.06 7% 34.72 384.70 7% 26.93 310.93 7% 21.77 103.80 7% 7.27 ---------------------------- 2013.86 140.98
总税额为140.97,而个人税额为140.98 :( :(如何将总税额与个人税额的总和相匹配。
任何建议
您对四舍五入的理解是不正确的。 27.2351比27.23更接近27.24,因此,不管有任何中点舍入选项,将27.2351舍入到小数点后两位将始终产生27.24。
中点舍入选项仅在数字恰好位于两个选项之间的中间位置时才起作用,即您的情况是27.2350000。 考虑数字行:
/--What to do at this exact point? | It's not "closer" to either side! | v .............round to 27.230............|...........round to 27.240............ <~---------------------------------------------------------------------------~> | | | 27.230 27.235 27.240
至于您在编辑中遇到的行为,这是正常的。 四舍五入的数字总和不一定总是与先将数字相加然后再四舍五入相同。 您需要阅读有关如何为您的特定辖区计算税金的信息,然后再执行此操作。
首先调用System.Math.Round(27.2351, 3, MidpointRounding.AwayFromZero)
应该返回27.24
因为这是对2
小数的正确答案。
您也不应将double
用于货币计算,而应使用decimal
。 始终在数字后加上m
,即27.2351m
而不是27.2351
(这是一个double
)。
现在,在剩下的问题中,您似乎在谈论获得“天花板”,而不是四舍五入。
调用System.Math.Round(2013.86m * 0.07m, 2, MidpointRounding.AwayFromZero)
给您140.97m
,但是如果有小数美分,税金应始终升至最接近的美分。
因此,这是您需要的电话:
System.Math.Ceiling(2013.86m * 0.07m * 100m) / 100m
得出140.98m
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.