VBA 函數 ROUND 的問題
最近才發現 Microsoft Office VBA 裡的 Round 函數跟我以為的不一樣!
下面是 Office 裡 Microsoft Visual Basic 的說明:
Round 函數
描述
傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果。
語法
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)
最近才發現 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)
文章標籤
全站熱搜
留言列表