2010-11-22

【Delphi】關於四捨五入

一般在需要使用四捨五入的函式時, 直覺上會想到 Round,因為在其他程式語言也大多使用這個字。

Delphi7 的輔助說明(HELP) 只有以索引排序的查法,所以只找到 RoundRoundTo;但這 2 個函式用的是 "Banker's Rounding",中文的說法是 "四捨六入五成雙"。

例如:
有一數字 3.4,我們要取到個位數,則 4 捨去,變成 3,這是四捨。
如果是數字 3.6,則 6 進位,變成 4,這是六入。
而當小數第一位是 5 時就得看情況了,如果是 3.5,這時因為我們是要取到個位數,所以要套用 "五成雙",也就是當 5 的左邊那個數字是單數時,則 5 要進位,原本的數字 3.5 這時就變成了 4
如果是數字 4.5,因為 4 已經是雙數了,所以 5 不用進位,要捨去,原本的數字 4.5 這時就變成了 4
所以 "五成雙" 的目的就是要讓 5 的左邊那個數字變成雙數。

Banker's Rounding(四捨六入五成雙)
3.4 ==> 3
3.6 ==> 4
3.5 ==> 4
4.5 ==> 4

這就讓人很傷筋了,其他程式語言都是直接四捨五入,怎麼就 Delphi 偏偏和人不一樣?!

其實,Delphi 可強著呢,她提供了許多的函式,要四捨五入,Delphi 也有,就是 SimpleRoundTo,用這個就對啦 :-D

不過用這個函式時要記得 use Math

沒有留言:

張貼留言