2022-02-22|閱讀時間 ‧ 約 2 分鐘

誤差之源,小數的肆捨伍入?

    券商的手續費怎麼取整數,是依 1. 單筆價量總金額先行計算,後在四捨五入 2. 依逐筆成交價金額,乘以手續費,先四捨五入,後以總量相乘計算 以券商立場,方案1、2,何者有利 ? 回答此問題,莫過於亂數模擬求解 !
    問題設計如下 A. 依均勻分布模式,產生n筆帶有小數的數字,n=2、3、4... B1 . n筆數字先加總,後四捨伍入 B2. n筆數字個別先四捨五入,後加總 C. 紀錄B1、B2的大小結果 D. 重複A、B、C步驟數萬次,統計其結果 !
    程式碼提供如下,結論是兩者差異不大,但是小心被上下其手,例如手續費計算的規則會悄悄變成Max(B1,B2),這隱含有超過55%的機率,多收一點點而又不被發覺的手續費收入 !
    Public Sub SumRound() Dim ii, x(1 To 100), y, z, u, v, sumA, sumB As Variant u = 0 v = 0 y = 10 '筆數 For z = 1 To 100000 '迴圈次數 'B1. y筆數字先加總,後四捨伍入 sumA = 0 For ii = 1 To y x(ii) = Rnd(1) sumA = sumA + x(ii) Next ii sumA = Round(sumA, 0)
    'B2. y筆數字個別先四捨五入,後加總 sumB = 0 For ii = 1 To y x(ii) = Round(Rnd(1), 0) sumB = sumB + x(ii) Next ii If sumA sumB Then u = u + 1 If sumA sumB Then v = v + 1 'Debug.Print z, ":", sumA, ",", sumB Next z Debug.Print u Debug.Print v
    End Sub
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.