首頁  >  文章  >  Java  >  為什麼將浮點型轉換為雙精度有時會失去精度?

為什麼將浮點型轉換為雙精度有時會失去精度?

Susan Sarandon
Susan Sarandon原創
2024-11-01 16:53:30825瀏覽

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

解析解

一種解法是將float 轉換為字元串,然後將字串解析為double,這樣會保留原始值:

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35

精度注意事項

需要注意的是,「額外」數字實際上並不是由double 原語添加的。浮點數根本不能準確地表示數字。雙精度值忠實地表示原始浮點值。

轉換為字串並傳回結果會產生更接近字串表示形式的雙精確值,但重要的是要驗證這是否確實是所需的。

BigDecimal 替代方案

在需要精確小數值的情況下(例如貨幣計算),請考慮使用BigDecimal 類型而不是float 或double,因為它可以確保更準確地表示十進制數字。

以上是為什麼將浮點型轉換為雙精度有時會失去精度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn