VBA 函數 ROUND 的問題



最近才發現 Microsoft Office VBA 裡的 Round 函數跟我以為的不一樣!

下面是 Office 裡 Microsoft Visual Basic 的說明:

Round 函數
描述
傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果。
語法
Round(expression [,numdecimalplaces])
Round 函數語法有如下幾個單元:
單元描述
expression 必要引數。要進行四捨五入運算的數值運算式。
numdecimalplaces 選擇性引數。數字值,表示進行四捨五入運算時,小數點右邊應保留的位元數。如果忽略,則 Round 函數傳回整數。

但其實是錯的!
這個函數傳回的結果其實是使用《四捨六入五成雙》來處理小數,也就是所謂的《銀行家捨入法 banker's rounding》!

(最新的微軟說明文件,已增加注意說明!)

範例:
Round(1.4) = 1
Round(1.6) = 2
Round(1.5) = 2
Round(2.4) = 2
Round(2.6) = 3
Round(2.5) = 2
Round(0.12335, 4) = 0.1234
Round(0.12345, 4) = 0.1234
Round(0.12355, 4) = 0.1236
Round(0.12365, 4) = 0.1236
Round(0.00005, 4) = 0

如果在 VBA 中想將數值《四捨五入》可以調用工作表函數這麼寫:
WorksheetFunction.Round(運算式, 小數位數)

範例:
WorksheetFunction.Round(2.5, 0) = 3
WorksheetFunction.Round(0.12345, 4) = 0.1235
WorksheetFunction.Round(0.12365, 4) = 0.1237
WorksheetFunction.Round(0.00005, 4) = 0.0001

如果想將數值《四捨五入》至整數還可以這麼寫:
Int(數值 + 0.5)

arrow
arrow
    文章標籤
    VB Round 四捨五入
    全站熱搜

    Grant 發表在 痞客邦 留言(16) 人氣()