我在Excel 2007中进行VBA编码。
当tm <&lt;时,我想加0.1当tm至少为5时,加上0.25,以及其他一些情况。在下面的代码中,当在第3次迭代中,当tm = 5时,表达式(tm < 5)
被评估为真。发生了什么?
更有趣的是,如果您尝试启动tm = 4.9,评估将是正确的!
Sub test()
Dim i As Integer
Dim tm As Double
tm = 4.8
For i = 1 To 5
MsgBox tm & " " & (tm < 5)
If tm < 2 Then
tm = tm + 0.05
ElseIf tm < 5 Then
tm = tm + 0.1
Else
tm = tm + 1
End If
Next i
End Sub
答案 0 :(得分:0)
浮点值(包括VBA&#39; s double
类型)不精确。
如果输出tm
有足够的小数位,你会发现它略小于5.0(例如4.9999999999999),但正在四舍五入显示。
答案 1 :(得分:0)
我认为问题是由于数据类型而导致的,由于其精确类型,有时会错误地忽略数字,看看使用&#34;货币&#34;而不是&#34; Double&#34;然后5的条件是假的,这可能是你的问题的解决方案。
答案 2 :(得分:0)
如前所述,这是由于浮点运算的精确性。如果您希望在与所需精度进行比较之前避免使用它,例如, round(tm,2)<5
而非tm<5
。