2

0.01 を 36.01 に追加して、結果として 36.02 を取得したいのですが、以下のコードは 36.019999999999994 を返します。

Double d = 36.01;
d = d + 0.01;

結果として 36.02 を取得する方法を誰か教えてもらえますか? 前もって感謝します

4

4 に答える 4

6

Decimalの代わりに使用してくださいDouble。Decimalの方が精度が高く、たとえば、金額を追加する場合に推奨されます。

これがあなたにもっと詳細を与える良い以前のSO投稿です:

10進数と2進数!-どちらをいつ使用すればよいですか?

于 2013-03-07T20:01:22.043 に答える
3

これは、浮動小数点数を追加しているためです。0.01 は小数の 1/100 thであり、使用可能なビット数で 2 進数で正確に表すことはできません。型を使用するか、必要に応じて適切なオーバーロードと丸めスタイルをdecimal使用して目的の精度に丸めることを検討してください。Math.Round()

于 2013-03-07T20:02:35.130 に答える
2

decimal提案どおりに使用する必要があります。さらに重要なことは、根本的な問題を理解するために、すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを読む必要があることです。

于 2013-03-07T20:05:00.520 に答える
0

double倍精度浮動小数点数でdecimalあり、より精度があります。

decimalの代わりに使用する必要があります。

decimal d = 36.01m;
d = d + 0.01m;
Console.WriteLine(d);

これがデモです。

そしてもちろん、私はあなたが読むことをお勧めします What Every Computer Scientist Should Know About Floating-Point Arithmetic

于 2013-03-07T20:01:44.947 に答える