.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一定进一.

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

public static decimal UNIT = 0.0.1m

static public  decimal  Round(decimal d)
{
    return Round(d,UNIT)
}

static public decimal Round(decimal d,decimal unit)
{
   decimal rm = d % unit;
   decimal result = d-rm;
   if( rm >= unit /2)
  {
      result += unit;
  } 
  return result ;
}

 

转载于:https://www.cnblogs.com/tonykan/p/3793836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值