四舍五入的坑

2023-02-03 17:53:29 浏览数 (2)

话说,再做一个财务报表统计中,发现一个简单的乘法 3.00 * 0.045 =0.135,按照咱们的四写五入就是 0.14。但我用C# 写var Value = Math.Round(3.00 * 0.045, 2), 竟然是0.13.。。不是预期的0.14,怎么办好呢。。

后来查询得知,原来在Math.Round加入MidpointRounding.AwayFromZero即可。eg:var Value = Math.Round(3.00 * 0.045, 2,MidpointRounding.AwayFromZero),那为什么要加入MidpointRounding.AwayFromZero呢。。

原来MidpointRounding 是一个枚举,而AwayFromZero是一个策略。说人话就是告诉 Math.Round该按什么原则进行处理。

更详细的看,微软自己的解释吧。https://learn.microsoft.com/zh-cn/dotnet/api/system.midpointrounding?redirectedfrom=MSDN&view=net-7.0#code-try-2

当然有更偏门的处理,就是直接取小数后第3位,然后判断这个,不过麻烦咯,也容易出错。所以就在这里留字,供其他人参考。

0 人点赞