ホームページ  >  記事  >  Java  >  丸め誤差を発生させずに Double の小数点以下の桁を正確に移動するにはどうすればよいですか?

丸め誤差を発生させずに Double の小数点以下の桁を正確に移動するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-28 00:15:12405ブラウズ

How to Accurately Move Decimal Places in a Double Without Rounding Errors?

四捨五入エラーなしで Double の小数点以下の桁を移動する方法

Double 内の小数点以下の桁を移動するには、本能的に 0.1 を掛けるかもしれません。ただし、0.1 はバイナリでの正確な表現ではないため、丸め誤差が生じる可能性があります。

より正確な方法

0.1 を使用する代わりに、正確に表現できる 100 を使用することをお勧めします。バイナリで。小数点以下の桁を移動するには、単純に 100 で割ります。

double x = 1234;
x /= 100;

丸めが避けられない理由

このアプローチを使用しても、浮動小数点の制限により、丸め誤差が依然として存在します。表現。 Double.toString() はある程度の丸めを実行しますが、丸めを完全に回避するには、多くの場合 BigDecimal を使用する必要があります。

x / 100 と x * 0.01 の比較

x / 100 と x * 0.01 は一致しないことに注意してください。丸め誤差に関しては同じです。最初の式の丸め誤差は x の値に依存しますが、2 番目の式の 0.01 には固定の丸め誤差があります。これにより、場合によっては異なる結果が生じる可能性があります。

結論

浮動小数点表現の制限を理解し、適切な手法を使用すると、double の小数点以下の桁を正確に処理し、丸め誤差を最小限に抑えることができます。不正確な乗算演算から発生します。

以上が丸め誤差を発生させずに Double の小数点以下の桁を正確に移動するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。