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