Re: [VBA ] 取小數點第三位問題

看板Visual_Basic作者 (Bob)時間6年前 (2018/09/25 00:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《RuinGgg (Tank)》之銘言: : 主要是Data1 和Data2要去做簡單比較, : Data1裡面是Excel資料,有小數點, : 我是直接以Round(XX,3)來寫, : EX: 6.3333333 -> 6.333 直接在 Excel 使用 =round(儲存格,3) 就是常見的四捨五入。 : Data2的資料是由VBA小程式跑出來的, : 其中我用worksheetfunction.round(XX,3)來寫,但是6.3333333會變成6.334 : 另外試了worksheetfunction.rounddown, : 結果變成6.332.... 我猜這邊描述有誤,因為直接使用 WorksheetFunction.Round(,3) 或是 WorksheetFunction.RoundDown(,3) 甚至 WorksheetFunction.RoundUp(,3) 相當於直接在 Excel 的儲存格輸入 =Round(), =RoundDown, =RoundUp() 不會出現你說的進位問題,都是單純的四捨五入、無條件捨去或進位。 你的提問應該是, 在 VBA 之下的 Round() 計算跟 使用 WorksheetFunction.Round() 為什麼有不同? 官方文件指出在 VBA 底下的 Round() 使用 奇進偶捨,又稱為四捨六入五成雙規則、銀行進位法(Banker's Rounding) ※維基百科 => (https://bit.ly/2DoAT6Q) ※Microsoft Docs => (https://bit.ly/2DqpnrN) 簡單來說,遇到 4 就捨去,遇到 6 就進位, 唯獨遇到 5 比較麻煩。 1. 5 後面有數值? 有 => 進位。 2. 5 後面沒有數值, 此時 5 前面的數字是偶數 => 捨去;5 前面是奇數 => 進位。 例如: Round(1.252,1)= 1.3 取小數第一位,5 後面有數值 Round(1.25,1) = 1.2 取小數第一位,5 後面無數值且前面是 2 偶數 Round(1.35,1) = 1.4 取小數第一位,5 後面無數值且前面是 3 奇數 因自己處理過計算數值的問題,藉此機會回答你的問題。:P (使用版本為 2007 Excel) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.65.78 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1537805427.A.4EA.html
文章代碼(AID): #1RgGnpJg (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #1RgGnpJg (Visual_Basic)