VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • .Net中Math.Round与四舍五入(转载)

有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法.

 

Banker's rounding(银行家舍入)算法,即四舍六入五取偶

事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的.

这个算法可以概括为:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。”


请看下面的例子:

Math.Round(3.44, 1); //Returns 3.4. 四舍

Math.Round(3.451, 1); //Returns 3.5 五后非零就进一
Math.Round(3.45, 1); //Returns 3.4. 五后皆零看奇偶, 五前为偶应舍去

Math.Round(3.75, 1); //Returns 3.8 五后皆零看奇偶,五前为奇要进一
Math.Round(3.46, 1); //Returns 3.5. 六入

 

如果要实现我们传统的四舍五入的功能,一种比较简单,投机的方法就是在数的后面加上0.0000000001,很小的一个数.因为"五后非零就进一", 所以可以保证5一定进一.

当然也可以自己写函数, 下面给出一段代码:

 


  1.  
    public static decimal UNIT = 0.0.1m
  2.  
     
  3.  
    static public decimal Round(decimal d)
  4.  
     
  5.  
    {
  6.  
     
  7.  
    return Round(d,UNIT)
  8.  
     
  9.  
    }
  10.  
     
  11.  
     
  12.  
    static public decimal Round(decimal d,decimal unit)
  13.  
     
  14.  
    {
  15.  
     
  16.  
    decimal rm = d % unit;
  17.  
     
  18.  
    decimal result = d-rm;
  19.  
     
  20.  
    if( rm >= unit /2)
  21.  
     
  22.  
    {
  23.  
     
  24.  
    result += unit;
  25.  
     
  26.  
    }
  27.  
     
  28.  
    return result ;
  29.  
     
  30.  
    }
 

 

补充:C#和VB.NET中计算方法都是四舍六入五取偶。包括CINT()等等


相关教程