VBA ElseIf评估错误

时间:2015-05-20 09:17:33

标签: excel-vba if-statement vba excel

我在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

3 个答案:

答案 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