.NET では二重乗算は機能しませんか? [重複] 質問する

.NET では二重乗算は機能しませんか? [重複] 質問する

C# で次の式を実行すると:

double i = 10*0.69;

iは:6.8999999999999995。なぜですか?

1/3 のような数字は、無限に繰り返される小数点以下の桁があるため、2 進数で表すのが難しいことは理解していますが、0.69 の場合はそうではありません。また、0.69 は 69 を表す 2 進数と、小数点以下の桁の位置を表す 2 進数で簡単に表すことができます。

これを回避するにはどうすればよいですか?decimalタイプを使用しますか?

ベストアンサー1

浮動小数点演算とデータの保存方法を誤解しているからです。

実際、この特定のケースでは、コードは実行時に実際に算術演算を実行していません。コンパイラ生成された実行ファイルに定数を保存したはずです。しかし、できない6.9 という正確な値は、1/3 が有限の 10 進表現で正確に保存できないのと同じように、浮動小数点形式では正確に表現できないため、保存できません。

確認するこの記事あなたを助けます。

おすすめ記事