Double 内の小数点以下の桁を移動するには、本能的に 0.1 を掛けるかもしれません。ただし、0.1 はバイナリでの正確な表現ではないため、丸め誤差が生じる可能性があります。
0.1 を使用する代わりに、正確に表現できる 100 を使用することをお勧めします。バイナリで。小数点以下の桁を移動するには、単純に 100 で割ります。
double x = 1234; x /= 100;
このアプローチを使用しても、浮動小数点の制限により、丸め誤差が依然として存在します。表現。 Double.toString() はある程度の丸めを実行しますが、丸めを完全に回避するには、多くの場合 BigDecimal を使用する必要があります。
x / 100 と x * 0.01 は一致しないことに注意してください。丸め誤差に関しては同じです。最初の式の丸め誤差は x の値に依存しますが、2 番目の式の 0.01 には固定の丸め誤差があります。これにより、場合によっては異なる結果が生じる可能性があります。
浮動小数点表現の制限を理解し、適切な手法を使用すると、double の小数点以下の桁を正確に処理し、丸め誤差を最小限に抑えることができます。不正確な乗算演算から発生します。
以上が丸め誤差を発生させずに Double の小数点以下の桁を正確に移動するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。