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

Mary-Kate Olsen
リリース: 2024-11-28 00:15:12
オリジナル
405 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート