私は現在、私を少し困惑させている問題があります。。ネット部門の丸め/小数点の差異
ここに背景があります:私たちは、asp.net 2.0ウェブアプリケーションを.net 4に64ビットサーバにアップグレードしています。新しいサーバーと古いサーバーの両方にデプロイされたテストアプリケーションを使用して、実際に動作する前に正常に動作することを確認します。どちらも別のサーバー上の同じデータベースを指しています。
は、ここで問題です:古いサーバーで
double totalGross;
double totalNet = 9999999.00;
float taxRate = 15.00f;
totalGross = totalNet * (1 + (taxRate/100));
、totalGross上.ToString()が生成:新しいサーバーで11499998.85
を、totalGross上.ToString()が生成します。 11499998.6115814
現在のところなぜこのような可能性がありますか?後者の値では、最初の数は丸められていません。
ところで - 私はコードを修正/改良する方法を守っていません...これが起こる可能性のある理由の直後です!
更新
私は、コンソールアプリケーションを作成し、x86およびx64でそれを構築し、サーバー上で両方のバージョンを実行し、それが二つの異なる数字を出力します。したがって、実際には、doubleを使用すると、32ビットと64ビットの間で何らかの精度が失われるように見えます。問題の精度の喪失が0.2であることは私には驚くばかりです。これは私には正確ではないように見えます。誰かが提案したように、おそらく十進数型を使用するほうが良いでしょう(私の防衛では、このコードは書いていませんでした)。
64bitと32bitの両方のマシンでこのコードを実行したところ、11499998.85という非常に奇妙なことです。 – Jethro
これらの値を変更するものは何もありませんか? –
暫定的に言えば、より適切な財務計算を使用してコードを実行する場合、どのような結果が観察されますか? –