最近在开发过程中,又遇到了四舍五入的问题。把之前的几种情况都测试了一下。并把想到的解决方法记录下来
在C#,VB,FastReport等在四舍五入问题上,和我们一般的理解不一样。
具体来说,就是 四舍六入五看双,下面详细举例来说明五的问题。
round(1.205,2)==>1.20 这里的5被舍掉了
round(1.215,2)==>1.22 这里的5进1了
原因:要看第二位是单数还是双数,单数进位,双数舍掉
要达到我们平时所需要的四舍五入,有以下几种方法:
1. 通用方法:
增加一个更小的值,如下
round(1.205+0.0001,2)==>1.21
round(1.215+0.0001,2)==>1.22
原因:只要在5后面还有值,系统就会认为是大于5
2. 如果提供了舍去函数,可以 加一个0.005,然后用舍去法
3. c#里可以用参数:MidpointRounding.AwayFromZero
Math.Round(1.205, 2,MidpointRounding.AwayFromZero)
Math.Round(1.215, 2,MidpointRounding.AwayFromZero).
要注意,有时候用double浮点时,系统会自动添加了很小的值在后面,可以用 decimal转换之后来测试。