且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C#中四舍五入的问题

更新时间:2022-09-20 11:16:00


Math.Round()准确的说,这个函数不是四舍五入,而是四舍六入五凑偶,就是说小于4或大于6的该舍该入是没有争议的,而5处在正中间,如果四舍五入则会造成数据的整体偏差,所以采取的原则是:如果舍入位为5,则舍入后最后一位为偶数,这是国际惯例。

C# 中没有四舍五入函数,事实上我知道的程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法 Banker 's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的。

下面的这段代码能实现严格的四舍五入:

C#中四舍五入的问题
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;
        }
C#中四舍五入的问题



本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/archive/2013/01/30/2882470.html,如需转载请自行联系原作者