そのため、Access で何年も実行されていたアプリケーションを、C#/Web アプリケーションに変換しようとしています。それはかなり正確な数学を扱っており、2 つの double 値の計算で問題が発生しました。
したがって、Access には次のコードがあります。
If Abs(varPartDataLocal(i, 0) - dblX_Star) < dblTemp Then
varPartDataLocal(i, 0) = 1.00000232 (データベースに文字列として格納) および dblX_Star = 1.00000226 (double に変換されて 2 で除算される 2 つの文字列値によって計算) であり、Access I でこれらの 2 つの値の Abs を取得すると、得る:
5.999999986E-08
一方、C# で同じコードを実行すると、次のようになります。
if (Math.Abs(Convert.ToDouble(varPartDataLocal[i, 0]) - dblX_Star) < dblTemp)
最後に:
6.0000000079441E-08
ただし、これを C# で行う場合 (基本的には上記と同じで、文字列から double に変換していません):
Math.Abs(1.00000232d - 1.00000226d)
それから私は得る
5.99999998573963E-08 (これは Access でこれを行う場合と同じです)
では、なぜ違いがあるのかという質問です。