0.01 を 36.01 に追加して、結果として 36.02 を取得したいのですが、以下のコードは 36.019999999999994 を返します。
Double d = 36.01;
d = d + 0.01;
結果として 36.02 を取得する方法を誰か教えてもらえますか? 前もって感謝します
0.01 を 36.01 に追加して、結果として 36.02 を取得したいのですが、以下のコードは 36.019999999999994 を返します。
Double d = 36.01;
d = d + 0.01;
結果として 36.02 を取得する方法を誰か教えてもらえますか? 前もって感謝します
Decimal
の代わりに使用してくださいDouble
。Decimalの方が精度が高く、たとえば、金額を追加する場合に推奨されます。
これがあなたにもっと詳細を与える良い以前のSO投稿です:
これは、浮動小数点数を追加しているためです。0.01 は小数の 1/100 thであり、使用可能なビット数で 2 進数で正確に表すことはできません。型を使用するか、必要に応じて適切なオーバーロードと丸めスタイルをdecimal
使用して目的の精度に丸めることを検討してください。Math.Round()
decimal
提案どおりに使用する必要があります。さらに重要なことは、根本的な問題を理解するために、すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを読む必要があることです。
double
倍精度浮動小数点数でdecimal
あり、より精度があります。
decimal
の代わりに使用する必要があります。
decimal d = 36.01m;
d = d + 0.01m;
Console.WriteLine(d);
これがデモです。
そしてもちろん、私はあなたが読むことをお勧めします What Every Computer Scientist Should Know About Floating-Point Arithmetic