float を double に変換すると精度が低下するように見えることがあるのはなぜですか?

Susan Sarandon
リリース: 2024-11-01 16:53:30
オリジナル
910 人が閲覧しました

Why Does Converting a Float to a Double Sometimes Appear to Lose Precision?

Float を Double に変換する際の精度の維持

問題

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 値になりますが、これが実際に望ましいものであることを確認することが重要です。

BigDecimal の代替

正確な 10 進数値が必要な状況 (金銭計算など) では、10 進数をより正確に表現できるため、float または double の代わりに BigDecimal 型の使用を検討してください。

以上がfloat を double に変換すると精度が低下するように見えることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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