在.NET中,为什么System.Math.Round(27.2351, 2, MidpointRounding.AwayFromZero)
会产生27.24
而不是27.23
?
第三个数字是5,所以我们检查第4个数字是否小于5,所以结果应该是27.23
有没有办法得到这个结果。
查看我的问题:
我的金额为2013.86,税金为7%。现在是2013.86 = 140.97
的7%但是这个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 :( :( 如何将总金额税额与个人金额税额的总和相匹配。
任何建议
答案 0 :(得分:3)
您对舍入的理解不正确。 27.2351比27.23更接近27.24,因此将27.2351舍入到2位小数将总是产生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
至于您在编辑中遇到的行为,这是正常的。舍入数字的总和并不总是与您先对数字相加,然后再进行一次数相同。您需要了解如何为您的特定司法管辖区计算税收,然后按照这一点进行。
答案 1 :(得分:1)
首先致电System.Math.Round(27.2351, 3, MidpointRounding.AwayFromZero)
,应该返回27.24
,因为这是2
小数位的正确答案。
您也不应该使用double
进行货币计算 - 请改用decimal
。始终使用m
后缀数字,即27.2351m
而不是27.2351
(double
)。
现在,在你提出的其他问题中,你似乎在谈论获得&#34;天花板&#34;,而不是四舍五入。
致电System.Math.Round(2013.86m * 0.07m, 2, MidpointRounding.AwayFromZero)
会为您提供140.97m
,但如果有一小部分分数,税款应始终上涨到最接近的分数。
所以这就是你需要的电话:
System.Math.Ceiling(2013.86m * 0.07m * 100m) / 100m
这给了140.98m
。