两个不是两个 – select案例条件永远不匹配

我想知道如果我的函数在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中的一个单元格调用这个函数,那会很奇怪:

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

在列A中,检查function的值是作为数字input的,而不是文本。
在B列中,您会看到返回的结果。
在列CI中显示了导致B列所示结果的函数调用。

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

我已经尝试过了:

  • 给函数“ByRef”而不是“ByVal”
  • 通过添加#(如“Case Is <= 2#:x = 8”),迫使显然不是双倍的值变成双倍
  • 用If构造replace开关构造
  • 给出坚实的范围(如“案例1.751至2:x = 8”)
  • 认为这可能是一个搞砸的安装Excel或一个有缺陷的Excel工作簿,但也发生在其他机器与全新的工作簿

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

我完全困惑,并没有find解决办法,所以任何帮助,这将是伟大的。

问候

曼努埃尔

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

2不是2 万亿,而是微不足道的。 Excel工作在15位浮点精度。 第15位数字四舍五入的差异非常小,导致浮点错误。

我build议像这样四舍五入dblWeight

  Select Case Round(dblWeight, 4) 

4位精度应该足够用于2个十进制数的范围。

请参阅浮点algorithm可能会给Excel中不准确的结果 。