首頁 > Java > java教程 > java中double類型運算結果異常的解決方法

java中double類型運算結果異常的解決方法

高洛峰
發布: 2017-01-23 16:08:32
原創
2196 人瀏覽過

問題:

對兩個double類型的值進行運算,有時會出現結果值異常的問題。如:

System.out.println(19.99+20);
  System.out.println(1.0-0.66);
  System.out.println(0.033*100);
  System.out.println(12.3/100);
登入後複製

輸出:

39.989999999999995
0.33999999999999997
解決方法:

Java中的簡單浮點數類型float和double不能夠進行運算,因為大多數情況下是正常的,但是偶爾會出現如上圖的問題。這個問題其實不是JAVA的bug,因為電腦本身是二進位的,而浮點數其實只是個近似值,所以從二進位轉換成十進位浮點數時,精確度容易遺失,導致精準度下降。

要確保精度就要使用BigDecimal類,而且不能直接從double直接轉BigDecimal,要將double轉string再轉BigDecimal。也就是不能使用BigDecimal(double val) 方法,你會發現沒有效果。要使用BigDecimal(String val) 方法。具體例子如下圖所示。

double型四則運算範例:

1、相加

public static double add(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.add(b2).doubleValue();
  }
登入後複製

2、相減

public static double sub(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.subtract(b2).doubleValue();
  }
登入後複製

3、相乘

為除不盡時,指定精度。

以上這篇java中double類型運算結果異常的解決方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持PHP中文網。

更多java中double類型運算結果異常的解決方法相關文章請關注PHP中文網!

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