如何在if语句中查看正在比较的内容

时间:2014-08-22 09:42:14

标签: vba excel-vba if-statement excel

我遇到了一些vba代码的问题。 我有一个if语句,不会同等对待相同的内容。 例如:0,1等于0,1,但重新运行0,1不等于0,1 (此值由MVBA显示)

代码很长,所以在发布之前我想知道是否可以在if语句中看到机器透视图(hex,ascii ...)。这是因为虽然调试告诉我它们是相同的(通过msgbox,vartype等),但是if语句没有被激活。

    pseudo code:
    x = 0,0000001 * 1*10^6 (which equals 0,1)
    y = 0,0001 * 1*10^3 (which also equals 0,1)

    if statement:
         x doesn't enter
         y does
    end if

1 个答案:

答案 0 :(得分:2)

这是因为浮点实现可能无法准确地表示这些数字,因为它们是以基数2表示形式编码的。

如果你想比较它们,我建议你使用Cdec(转换为Decimal,一个VBA自定义基数10浮点数)

Debug.Print (0.0000001 * 1 * 10 ^ 6) = (0.0001 * 1 * 10 ^ 3) ' False
Debug.Print CDec(0.0000001 * 1 * 10 ^ 6) = CDec(0.0001 * 1 * 10 ^ 3) ' True

虽然它们都显示0.1,但实际上0.0000001 * 1 * 10 ^ 6的浮点值为0x3FB9999999999999,而0.0001 * 1 * 10 ^ 3则返回0x3FB999999999999A

我建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic