処刑の最中、
すぐにウィンドウを開いて、次のように入力しました。
?1.66 + 0.83
この式の結果として、次のように表示されました。
2.4899999999999998
実際にはその式は返されるはず2.49
ですが、浮動小数点が異なる同じ値が返されます。これの何が問題なの? これを修正するための回避策はありますか? ちなみに、上記の値をフォーマットしたくありません。
処刑の最中、
すぐにウィンドウを開いて、次のように入力しました。
?1.66 + 0.83
この式の結果として、次のように表示されました。
2.4899999999999998
実際にはその式は返されるはず2.49
ですが、浮動小数点が異なる同じ値が返されます。これの何が問題なの? これを修正するための回避策はありますか? ちなみに、上記の値をフォーマットしたくありません。
これが浮動小数点数の仕組みです。それらはある程度の精度で機能します。1.66
実際に書き込むと、メモリとして、1.66000000000000000001
または1.65999999999999999
メモリに格納される場合があります。したがって、これらの数値を合計し始めると、小さなエラーが加算されます。
これを回避したい場合は、System.Decimal
ほとんどのシナリオでこの問題を解決するデータ型を使用できます (正確な値を保持するメモリに値を格納するために別のモデルを使用します)。
たとえば、試してみてください
?1.66D + 0.83D
D
サフィックスは、値が型であることを意味しますDecimal
イミディエイト ウィンドウは、値を小数点以下の桁数で表示しています。これがデフォルトの動作です。小数点以下 2 桁を切り上げたい場合は、書式設定を適用する必要があります。