VBA中Double类型变量If条件始终不成立问题求助
解决Double类型变量相等判断失效的问题
直接解决方案
不要直接用=或<>判断Double类型变量的相等性,改用精度阈值比较法:
- 若要判断
Bm等于1,修改If语句条件:If Abs(Bm - 1) < 1e-9 Then GoTo FIN End If - 若要判断
Bm等于Bmin,则改成:If Abs(Bm - Bmin) < 1e-9 Then GoTo FIN End If - 对应的Do While循环条件调整为:
Do While condition1 And Abs(Bm - 1) >= 1e-9
原因说明
Double是浮点数类型,它在内存中存储的是数值的近似值而非精确值。即便调试时显示变量值为1,实际可能是0.999999999999999或1.000000000000001这类极其接近1但不等于1的数值。直接用=判断会因这种微小的精度误差导致条件不成立,而通过判断两个值的差的绝对值是否小于一个极小阈值(比如1e-9),可以忽略浮点数精度带来的误差,实现逻辑上的相等判断。
内容的提问来源于stack exchange,提问作者GLab
相关产品推荐
相关产品推荐

