Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2019)
小数点以下の二捨三入
投稿日時: 22/02/23 09:45:01
投稿者: osomatu

小数点以下の数字の、二捨三入プログラムを考えています。以下のように作成したのですが、3の時に反応しません。何が悪いのか、ご教示下さい。よろしくお願いします。
 
Sub test()
For i = 1 To 5
t = i / 10 + 2 '小数点プラス2
If (t - Int(t)) * 10 >= 3 Then
    t = Int(t) + 1 '3以上なら1を追加
    Debug.Print i; "-"; t
Else
    t = Int(t) '2以下なら、整数部分を表示
    Debug.Print i; "-"; t
End If
t = 0
Next i
End Sub

回答
投稿日時: 22/02/23 10:31:55
投稿者: よろずや

コンピュータでは、普通小数点以下のある数字を扱うとき2進数の浮動小数点数を使います。
2進数では10進数の小数を正確に表すことが出来ません。
そのため、プログラムで0.3の計算をしても10進→2進の変換過程で誤差を生じる為
実際には 0.29999999999999 というような値になってしまいます。
ですから、(0.3 * 10) >= 3 が真にならないのです。
 
小数以下の10進数を扱うときは Currency とか Decimal なんてのを使います。
 

Option Explicit
Sub test()
Dim i As Long
Dim t As Currency
For i = 1 To 5
t = i / 10 + 2 '小数点プラス2
If (t - Int(t)) * 10 >= 3 Then
    t = Int(t) + 1 '3以上なら1を追加
    Debug.Print i; "-"; t
Else
    t = Int(t) '2以下なら、整数部分を表示
    Debug.Print i; "-"; t
End If
t = 0
Next i
End Sub

投稿日時: 22/02/23 15:26:47
投稿者: osomatu

よろずや さま
 
的確な回答、ありがとうございました。
思った通りの動きとなりました。
 
エクセルシートとVBAで、動きが違って困っていました。