• 當前位置:首頁 > IT技術 > 編程語言 > 正文

    java double精度丟失 0.1+0.2不等于0.3
    2022-05-11 10:55:59


    java里,不能直接使用double進行運算

    否則如下

    0.1+0.2不等于0.3

    //'main' method must be in a class 'Rextester'.
    //Compiler version 1.8.0_111

    import java.util.*;
    import java.lang.*;
    import java.math.*;

    class Rextester
    {
    public static void main(String args[])
    {
    System.out.println("Hello, World!");
    double d1 = 0.1, d2 = 0.2;
    System.out.println(d1 + d2);

    }
    }

    java double精度丟失 0.1+0.2不等于0.3_java

    所以需要使用BigDecimal轉一下。

    BigDecimal有下列構造函數

    BigDecimal(int var)  //創建一個具有參數所指定整數值的對象。
    BigDecimal(double var) //創建一個具有參數所指定雙精度值的對象。
    BigDecimal(long var) //創建一個具有參數所指定長整數值的對象。
    BigDecimal(String var) //創建一個具有參數所指定以字符串表示的數值的對象。

    但是要使用BigDecimal(String var),其它的不管用??!

    //'main' method must be in a class 'Rextester'.
    //Compiler version 1.8.0_111

    import java.util.*;
    import java.lang.*;
    import java.math.*;

    class Rextester
    {
    public static void main(String args[])
    {
    System.out.println("Hello, World!");
    double d1 = 0.1, d2 = 0.2;
    System.out.println(d1 + d2);
    System.out.println(new BigDecimal(d1).add(new BigDecimal(d2)).doubleValue());
    System.out.println(BigDecimal.valueOf(d1).add(BigDecimal.valueOf(d2)).doubleValue());
    System.out.println(new BigDecimal(Double.toString(d1)).add(new BigDecimal(Double.toString(d2))).doubleValue());
    }
    }

    java double精度丟失 0.1+0.2不等于0.3_java_02

    另附BigDecimal如何加減乘除

    BigDecimal add(BigDecimal augend)  //加法運算
    BigDecimal subtract(BigDecimal subtrahend) //減法運算
    BigDecimal multiply(BigDecimal multiplicand) //乘法運算
    BigDecimal divide(BigDecimal divisor) //除法運算

    參考:

    https://www.jianshu.com/p/353834bbe7da

    公眾哈:微程序學堂


    本文摘自 :https://blog.51cto.com/s

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码