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()
。
我在 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()
。