posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

(地基工)四舍五入法

Posted on 2011-05-03 16:32 点点滴滴 阅读(312) 评论(0)  编辑 收藏 引用 所属分类: 02 编程语言
 

 一、四舍五入法

    四舍五入是一种应用非常广泛的近似计算方法,其有算术舍入法和银行家舍入法两种。

    所谓算术舍入法,就是我们通常意义上的四舍五入法。其规则是:当舍去位的数值大于等于5时,在舍去该位的同时向前位进一;当舍去位的数值小于5时,则直接舍去该位。

    所谓银行家舍入法,其实质是一种四舍六入五留双(又称四舍六入五奇偶)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。

    综上所述,两种舍入法所得结果不尽一致,因此在使用时必须根据实际需要加以区别。否则会出现一些莫明其妙的偏差。

    二、Delphi中的四舍五入函数

    众所周知,Delphi中有一个四舍五入取整函数Round。但它是按银行家舍入法的规则实施舍入操作的,Delphi中没有按算术舍入法规则实施舍入操作的四舍五入取整函数。为此,本人编写了一个基于算术舍入法的四舍五入取整函数RoundEx作为对Delphi的补充。具体实现如下:

 

    function RoundEx (const Value: Real): integer;
    var
      x: Real;
    begin
      x :
= Value - Trunc(Value);
      
if x >= 0.5 then
        Result :
= Trunc(Value) + 1
      
else Result := Trunc(Value);
    end;