Float プリミティブを Double プリミティブにキャストすると、明らかな精度の低下が発生する可能性があります。この現象は、多くの場合、double の「余分な」精度に起因すると考えられますが、実際には、特定の数値を正確に表現する float の能力が限られていることが原因です。
次の例では、float を double にキャストすると、次の結果が導入されます。数字:
float temp = 14009.35F; System.out.println(Float.toString(temp)); // 14009.35 System.out.println(Double.toString((double)temp)); // 14009.349609375
回避策の 1 つは、float を文字列に変換し、その文字列を元の値を保持する double として解析することです:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35
「余分な」桁は double プリミティブによって実際には追加されないことに注意することが重要です。 float は単に数値を正確に表していませんでした。 double は、元の float の値を忠実に表します。
文字列への変換とその逆の結果は、文字列表現に近い double 値になりますが、これが実際に望ましいものであることを確認することが重要です。
正確な 10 進数値が必要な状況 (金銭計算など) では、10 進数をより正確に表現できるため、float または double の代わりに BigDecimal 型の使用を検討してください。
以上がfloat を double に変換すると精度が低下するように見えることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。