在Delphi中使用Round函數得到的答案有時與我們所預期的會不太一樣:
採用的是四捨六入五留雙。即當捨或入位大於或小於五時按四捨五入來處理,而當舍或入位等於五時,就要看前面一位是什麼,根據奇進偶不進,它總是返回一個偶數值。
範例結果
i:= Round(11.5) 12
i:= Round(10.5) 10
這種Round其實是依照銀行家演算法,統計學上一般都用這種演算法,比傳統的"四捨五入"要科學。
如果要使用傳統的"四捨五入"方法,可以使用下面函數:
function RoundClassic(R: Real): Int64;
begin
Result:= Trunc(R);
if Frac(R) >= 0.5 then
Result:= Result + 1;
end;
其實在VB、Excel、.net相關的語言中都有這個問題。