gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:16:01 25 4
gpt4 key购买 nike

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

代码很长,所以在发布之前我想知道是否可以在 if 语句(十六进制,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

最佳答案

这是因为浮点实现可能无法准确地表示这些数字,因为它们以基数 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浮点值为 0x3FB99999999999990.0001 * 1 * 10 ^ 3返回 0x3FB999999999999A .

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

关于vba - 如何在 if 语句中查看正在比较的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25444022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com