国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 13:27:26
字體:
來源:轉載
供稿:網友

問題:

對兩個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
3.3000000000000003
0.12300000000000001

解決方法:

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、相乘

public static double mul(double a1, double b1) {    BigDecimal a2 = new BigDecimal(Double.toString(a1));    BigDecimal b2 = new BigDecimal(Double.toString(b1));    return a2.multiply(b2).doubleValue();   }

4、相除

public static double div(double a1, double b1, int scale) {  if (scale < 0) {    throw new IllegalArgumentException("error");   }  BigDecimal a2 = new BigDecimal(Double.toString(a1));   BigDecimal b2 = new BigDecimal(Double.toString(b1));   return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  }

scale參數為除不盡時,指定精度。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙南县| 乐山市| 石屏县| 陕西省| 仙游县| 德兴市| 徐汇区| 象州县| 金川县| 西盟| 霞浦县| 大埔县| 美姑县| 吴桥县| 昔阳县| 前郭尔| 建始县| 福建省| 北京市| 高密市| 内江市| 库伦旗| 罗定市| 霞浦县| 和田市| 从化市| 焉耆| 东辽县| 苍溪县| 玛曲县| 深泽县| 富锦市| 井冈山市| 松阳县| 社会| 博白县| 宁蒗| 泰州市| 炉霍县| 渭南市| 贵阳市|