四舍五入是软件开发中经常遇到的问题,我也在不止一个项目中用到这方面的运算;关于c#的四舍五入,如果你去网上搜会有好多结果,但大部分的内容都是说微软的Math.Round() 不准确,属于“四舍六入五成双”,然后会有很多人自己去写方法来实现,有的很简单,有的很复杂,有的还不对;
其实要实现这个功能,真的不用这么麻烦;大家既然知道c#有Math.Round(),难道就没发现它有多大8个重载方法吗,其中有一个类型是MidpointRounding的参数,只要我们很好的利用它,就完全可以实现很精确的四舍五入,根本不用写那么复杂的方法。
MidpointRounding:指定数学舍入方法应如何处理两个数字间的中间值。
下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零,这意味着小数点之后的数字会影响舍入运算。例如,对于数字 -2.5,小数点之后的数字是 5。由于该数字是中间值,因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero,则将返回 -3,因为它是精度为零且与零最接近的数字。如果指定了 ToEven,则将返回 -2,因为它是精度为零的最接近的偶数。
不用我再解释了吧,假如像把3.455四舍五入到3.46,实际上只需要用下面的代码就可以
==============================
Math.Round( 3.455, 2, MidpointRounding.AwayFromZero)
==============================
其实要实现这个功能,真的不用这么麻烦;大家既然知道c#有Math.Round(),难道就没发现它有多大8个重载方法吗,其中有一个类型是MidpointRounding的参数,只要我们很好的利用它,就完全可以实现很精确的四舍五入,根本不用写那么复杂的方法。
MidpointRounding:指定数学舍入方法应如何处理两个数字间的中间值。
下表演示与 MidpointRounding 的值结合使用的某些正数和负数的舍入结果。在舍入数字时所使用的精度是零,这意味着小数点之后的数字会影响舍入运算。例如,对于数字 -2.5,小数点之后的数字是 5。由于该数字是中间值,因此您可以使用 MidpointRounding 值来确定舍入结果。如果指定了 AwayFromZero,则将返回 -3,因为它是精度为零且与零最接近的数字。如果指定了 ToEven,则将返回 -2,因为它是精度为零的最接近的偶数。
原始数字 |
取绝对值较大的值 |
取偶数 |
3.5 |
4 |
4 |
2.8 |
3 |
3 |
2.5 |
3 |
2 |
2.1 |
2 |
2 |
-2.1 |
-2 |
-2 |
-2.5 |
-3 |
-2 |
-2.8 |
-3 |
-3 |
-3.5 |
-4 |
-4 |
不用我再解释了吧,假如像把3.455四舍五入到3.46,实际上只需要用下面的代码就可以
==============================
Math.Round( 3.455, 2, MidpointRounding.AwayFromZero)
==============================