Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。
C# 中没有四舍五入函数,事实上我知道的程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法 Banker 's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的。
下面的这段代码能实现严格的四舍五入:
private double Round(double v, int x) { int IValue = 1; for (int i = 1; i <= x; i++) { IValue = IValue * 10; } double Int = Math.Truncate(v * IValue + 0.5); v = Int / IValue; return v; }
本文参考了http://www.cnblogs.com/sunney/archive/2010/07/28/1786903.html