zoukankan      html  css  js  c++  java
  • 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/sunney/archive/2010/07/28/1786903.html

  • 相关阅读:
    CentOS7 安装MongoDB 3.0服务
    PXE批量部署linux操作系统
    centos的软件安装方法rpm和yum
    第二章:Posix IPC
    第一章:简介
    Unix网络编程--卷二:进程间通信
    Unix网络编程--卷二:FAQ
    linux下samba环境搭建
    Linux下缓冲区溢出攻击的原理及对策(转载)
    lsof
  • 原文地址:https://www.cnblogs.com/youring2/p/2882470.html
Copyright © 2011-2022 走看看