C#中四舍五入的问题

简介:

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/youring2/archive/2013/01/30/2882470.html,如需转载请自行联系原作者
相关文章
|
JavaScript 前端开发
toFixed四舍五入出现的问题
toFixed四舍五入出现的问题
318 0
toFixed四舍五入出现的问题
06:浮点数向零舍入
06:浮点数向零舍入
214 0
真正的四舍五入
真正的四舍五入
|
Java
小数的运算使用BigDecimal
小数的运算使用BigDecimal
119 0
小数的运算使用BigDecimal
|
NoSQL BI MongoDB
从“四舍五入”到“奇进偶舍”
处理取整时,大概下意识的想到的方法,都是“四舍五入”吧?不过我们可以先看两个例子,在Python 3中,round(4.5) == 4,而在mongodb 以上的版本中,{$round: 4.5}的结果也是4。
1859 0