当我们在使用**Math.Round()**时我们会发现,他并不是我们传统意义上理解的四舍五入,具体的体现是四舍六入,但也不完全是四舍六入。
当前一位为奇数时为我们所理解的四舍五入
当前一位为偶数时为我们所理解的四舍六入
Math.Round(1.5) //2
Math.Round(2.5) //2
那么我们如何去实现我们想要的四舍五入?
那我们就用使用到Round重载中的另一个方法中的函数
MidpointRounding
MidpointRounding.ToEven //国际的四舍五入,如上所述
MidpointRounding.AwayFromZero //我们传统意义上的四舍五入
所以我们在运用是加上MidpointRounding.AwayFromZero,也就实现了我们想要达到的效果
Math.Round(1.5,MidpointRounding.AwayFromZero) //2
Math.Round(2.5,MidpointRounding.AwayFromZero) //3
当我们需要保留多个小数位时依旧可以采用此方法
Math.Round(1.455,2,MidpointRounding.AwayFromZero) //1.46
Math.Round(2.445,2,MidpointRounding.AwayFromZero) //1.44
那么此时我们会发现,他又回到了四舍六入,那么这是为什么呢?
后来发现,他是由于精度造成的
Math.Round((decimal)1.455,2,MidpointRounding.AwayFromZero) //1.46
Math.Round((decimal)2.445,2,MidpointRounding.AwayFromZero) //1.45
至此,目标达成