首頁 > Java > java教程 > 主體

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

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
登入後複製

解析解

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

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35
登入後複製

精度注意事項

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

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

BigDecimal 替代方案

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

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板