我们知道知道在截取近似值的时候,常采取四舍五入的做法,但是这并不十分科学。
如果有很多数据要做Rounding,那么4舍6入,没有问题,因为从统计意义来说,“舍”与“入”带来的偏差会相互抵消;但是如果要舍的那一位偏偏是5,问题就来了。
如果所有的5都“入”上去,就没有地方可以抵消这种影响,就会造成数据整体偏大。
国际上比较通行的做法是“四舍五入取偶”,也就是说,取舍之后让数字的最后一位为偶。举例如下:
1.25,舍,1.2;
1.35,进,1.4;
1.45,舍,1.4;
1.55,进,1.6;
……
这样做,在统计上就会有一半的5采取“入”,一半的5采取“舍”,相互抵消,保持数据整体准确。
所以在C#编码中,如果需要简单的“四舍五入”,就需要指定MidpointRounding
参数。
// 1.2
var test1 = decimal.Round(1.15M, 1, MidpointRounding.AwayFromZero);
//1.3
var test2 = decimal.Round(1.25M, 1, MidpointRounding.AwayFromZero);
其它语言请自行搜索。
以上。