C#中Math.Round()实现中国式四舍五入
Math.Round(0.4) //result:0
Math.Round(0.5) //result:0
在unity3D客户端开发的时候,会出现很多计算出来的数值,但是只能显示整数,因此用Math.Round()方法实现四舍五入。
但C#中的Math.Round(decimal d)并不是使用的"四舍五入"法。其实在VB、C#等语言中中Round函数都是采用Banker's rounding(银行家算法),即:四舍六入五取偶。事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上的"四舍五入"。即: Math.Round(4.5, MidpointRounding.AwayFromZero) = 5
Math.Round(0.3) //result:0
Math.Round(0.5) //result:0//取偶
Math.Round(0.9) //result:1
Math.Round(1.5) //result:2//取偶
Math.Round(2.5) //result:2//取偶
使用MidpointRounding.AwayFromZero重载后对比:
Math.Round(0.4, MidpointRounding.AwayFromZero); // result:0
Math.Round(0.6, MidpointRounding.AwayFromZero); // result:1
Math.Round(0.5, MidpointRounding.AwayFromZero); // result:1
Math.Round(1.5, MidpointRounding.AwayFromZero); // result:2
Math.Round(2.5, MidpointRounding.AwayFromZero); // result:3
所以,这种方法可以实现四舍五入,但是,如果用这个进行小数运算,就会有问题了,所以使用小数运算应该使用下面的方法
decimal Round(decimal d, int decimals, MidpointRounding mode)
Math.Round(356.325, 2)
356.32
Math.Round(356.325, 2,MidpointRounding.AwayFromZero)
356.32
Math.Round((decimal)356.325, 2)
356.32
Math.Round((decimal)356.325, 2,MidpointRounding.AwayFromZero)
356.33
最后的结果才是正确结果