因此,我正在将一个在 Access 中运行多年的应用程序转换为 C#/web 应用程序。它处理一些非常精确的数学,我遇到了计算两个双精度值的问题。
所以在Access中我有以下代码:
If Abs(varPartDataLocal(i, 0) - dblX_Star) < dblTemp Then
其中 varPartDataLocal(i, 0) = 1.00000232 (作为字符串存储在数据库中)和 dblX_Star = 1.00000226 (由转换为双精度并除以 2 的两个字符串值计算)以及当我在 Access I 中获得这两个值的 Abs 时得到:
5.999999986E-08
而当我在 C# 中执行相同的代码时:
if (Math.Abs(Convert.ToDouble(varPartDataLocal[i, 0]) - dblX_Star) < dblTemp)
我结束了我们:
6.0000000079441E-08
但是,如果我在 C# 中执行此操作(基本上与上面相同,我只是不将其从字符串转换为双精度):
Math.Abs(1.00000232d - 1.00000226d)
然后我得到
5.99999998573963E-08(与我在 Access 中执行此操作时相同)
那么问题是为什么会有差异?