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

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

高洛峰
高洛峰原創
2017-01-23 16:08:322214瀏覽

問題:

對兩個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中文網!

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