Posted on 2011-05-03 16:32
點點滴滴 閱讀(329)
評論(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;