二不是二 - Select 案例条件从不匹配

Two is not Two - Select case condition never matches

我想知道我的函数在 VBA 中的某些行为是否是错误,或者我的代码是否有问题。如果它是一个错误,我也将不胜感激,我该如何解决这个问题。

Option Explicit

Public Function someFunction(dblWeight As Double) As Integer
  Dim x As Integer

  Select Case dblWeight
    Case Is <= 0.25: x = 1
    Case Is <= 0.5: x = 2
    Case Is <= 0.75: x = 3
    Case Is <= 1: x = 4
    Case Is <= 1.25: x = 5
    Case Is <= 1.5: x = 6
    Case Is <= 1.75: x = 7
    Case Is <= 2: x = 8
    Case Is <= 3: x = 9
    Case Is <= 4: x = 10
    Case Is <= 5: x = 11
    Case Is <= 10: x = 12
    Case Else: x = 13
  End Select

  someFunction = x
End Function

如果我直接从 VBA 代码调用此函数,所有结果都符合预期。如果我从 Excel 中的单元格调用此函数,它会变得奇怪:

         A       B       C
1      1.9       8       '=someFunction(A1)
2      2.0       9       '=someFunction(A2)
3      2.1       9       '=someFunction(A3)

在 A 列中,根据函数检查的值以数字形式输入,而不是以文本形式输入。
在 B 列中,您会看到返回的结果。
在 C 列中,我向您展示了导致 B 列中所示结果的函数调用。

问题是:为什么2.0不小于等于2?

我已经尝试过的:

所有这些都没有帮助。更神秘的是,它只发生在值 2 上。如果我将 excel sheet 中的值从 2.0 更改为 1.0,我得到的结果是 4 而不是5 - 所以这种行为甚至不一致。

我完全困惑,找不到解决这个问题的方法,所以任何帮助都会很好。

问候

曼纽尔

The question is: why is 2.0 not less or equal 2?

2 不是 2.000000000000000 而是无限小地偏离时。 Excel 适用于 15 位浮点精度。第 15 位四舍五入方式的微小差异会导致浮点错误。

我建议像这样四舍五入 dblWeight

  Select Case Round(dblWeight, 4)

4 位精度对于 2 位小数的范围来说应该绰绰有余。

Floating-point arithmetic may give inaccurate results in Excel