【问题标题】:VBA ElseIf evaluation errorVBA ElseIf 评估错误
【发布时间】:2017-10-04 17:16:56
【问题描述】:

我正在 Excel 2007 中进行 VBA 编码。

我想在 tm (tm < 5) 在 tm = 5 时被评估为 true。这是怎么回事?

更有趣的是,如果您尝试从 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

【问题讨论】:

标签: excel if-statement vba


【解决方案1】:

浮点值(包括 VBA 的 double 类型)不精确。

如果您输出的tm 有足够的小数位,您会发现它略小于 5.0(例如 4.9999999999999),但正在四舍五入以便显示。

【讨论】:

    【解决方案2】:

    我认为问题是由数据类型引起的,double 有时会由于其精度类型而错误地取整数字,看看当你使用“货币”而不是“双”时的情况,那么 5 的条件为假,这可能是解决您的问题。

    【讨论】:

      【解决方案3】:

      如前所述,这是由于浮点运算的精度。如果您想避免在与所需精度进行比较之前将您的值四舍五入,例如round(tm,2)&lt;5 而不仅仅是 tm&lt;5

      【讨论】:

      • 如果它解决了您的问题,请接受它作为答案,这就足够了,不需要投票了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多