VB6 和 VB.NET 的精度差异

Precision difference in VB6 and VB.NET

我在 VB 6 和 VB.NET 中得到了两个不同的结果,相同的代码处理除法运算。

ABC = 9.999728
result = IIf(ABC <> 0, 1 / ABC, 10 ^ 10)

在 VB6 中,我得到结果 = 0.1000027

在VB.NET中,结果为0.100002721

然而,当我在 VB.NET 中使用 CSng(Val(CStr(result))) 时,我得到 0.1000027。

1) 为什么 VB.NET 与 VB6 相比产生不同的精度?

2) 为什么 CSng(Val(CStr(result))) 产生与 VB6 相同的精度?

3) 这可能看起来微不足道和简单,但这个问题会重复出现并传播到我的最终结果,这与 VB6 中的等效结果不同。我可以安全地假设 VB.NET 结果比 VB6 更精确并完全丢弃 VB6 结果吗?

在 VB6 中:

Dim ABC, result

ABC = 9.999728
result = IIf(ABC <> 0, 1 / ABC, 10 ^ 10)
MsgBox result

显示:

0.100002720073986

随意使用CSng()当然会截断精度,过时的Val()函数应该像瘟疫一样避免。如果您想要 Double,请改用 CDbl()