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 進表現で正確に保存できないのと同じように、浮動小数点形式では正確に表現できないため、保存できません。
確認するこの記事あなたを助けます。