|
おはようございます。
>ROUND()関数をVBAのユーザー定義関数で使用しているのですが、
>ある計算値が0.105 これをROUND(計算値,2)とすると
>0.1になってしまいます。正解は0.11のはずなのですが
>なぜでしょう?
以下のコードを実行してみてください
'===========================================
Sub sample()
Dim a As Double
a = 0.105
MsgBox Round(a, 2)
MsgBox Application.Round(a, 2)
End Sub
昔、算数で習った四捨五入は、Application.Round こっちです。
Roundは、銀行型の四捨五入と いうんですって!!
意味は「銀行型の四捨五入」で検索してみてください(Google等で)。
このRound違いが原因でしょうか?
但し、Application.Roundでも りんさんが記述されていた
>浮動小数点問題で、0.105ではなく0.104999999みたいな値になってるのだと思います。
>なので計算にCurrency(通貨型、下4桁まで保障)を使用するか、Roundをかける時に>ROUND(計算値+0.000001,2)などとして調整するといいです。
は考慮しないと計算が合わない場合も出てくると思いますよ!!
何らかの演算結果を丸める場合は、対策が必要です。
とにかく、小数を扱う場合は、要注意です!!
|
|