数値精度の維持: Float から Double への変換
プリミティブ データ型を扱う場合、精度を確保することが重要です。 float を double に変換すると、意図しない丸めエラーが発生する場合があります。次の例で示すように、float を double に直接キャストすると、予期しない追加の精度が得られる可能性があります。
float temp = 14009.35F; System.out.println(Float.toString(temp)); // Prints 14009.35 System.out.println(Double.toString((double) temp)); // Prints 14009.349609375
この見かけ上の「余分な」精度は、変換中に実際には得られません。その代わり、float は意図した数値を正確に表していませんでした。一方、double は元の float の値を正確に反映します。文字列に変換すると、double は float に存在していた「隠された」データを明らかにします。
次の例を考えてみましょう:
float f = 0.1F; double d = f;
f の値は、正確に 0.100000234523 である可能性があります。 d は同じ値を持ちますが、文字列に変換すると、より高い精度で表示され、すでに存在していた「余分な」数字が表示されます。
文字列に変換して元に戻すと、倍精度の値に近づきます。元の浮動小数点数よりも文字列表現に変更されます。ただし、これは、文字列値が意図した数値を本当に表す場合にのみ有益です。
このシナリオでは、BigDecimal がより適切なデータ型であるかどうかを検討する価値があります。 BigDecimal は正確な 10 進数値用に特別に設計されており、必要な表現を正確に操作できるようになります。
以上がfloat を double に変換すると精度が向上するように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。