Java中float和double的精度


比較基本類型double和float和某一個數是否相等的時候,不要用==或>=或<=,因為double和float都是有精度問題的,計算機只能保存一定位數的小數,這就會存在精度問題。

下面我們看一下java中float和double能夠比較到小數后幾位:

代碼實現:

 

public class Main {
    public static void main(String[] args) {
        float f6 = 1.000003f;//6位小數位,總共7位
        float f_8 = 10.000003f;//6位小數位,總共8位
        double d15 = 1.000000000000003;//15位小數位,總共16位
        double d_17 = 10.000000000000003;//15位小數位,總共17位
        
        float f7 = 1.0000003f;//7位小數位,總共8位
        float f_9 = 10.0000003f;//7位小數位,總共9位
        double d16 = 1.0000000000000003;//16位小數位,總共17位
        double d_18 = 10.0000000000000003;//16位小數位,總共18位   
        
        float f8 = 1.00000003f;//8位小數位,總共9位
        float f_10 = 10.00000003f;//8位小數位,總共10位
        double d17 = 1.00000000000000003;//17位小數位,總共18位
        double d_19 = 10.00000000000000003;//17位小數位,總共19位        
        
        System.out.println(f6==1);
        System.out.println(d15==1);
        System.out.println("------------------");

        System.out.println(f7==1);
        System.out.println(d16==1);
        System.out.println("------------------");

        System.out.println(f8==1);
        System.out.println(d17==1);
        System.out.println("------------------");
//-----------------------------------------------
        System.out.println(f_8==10);
        System.out.println(d_17==10);
        System.out.println("------------------");

        System.out.println(f_9==10);
        System.out.println(d_18==10);
        System.out.println("------------------");

        System.out.println(f_10==10);
        System.out.println(d_19==10);
        System.out.println("------------------");
    }
}

 

 

 

輸出結果:

false
false
------------------
false
false
------------------
true
true
------------------

------------------------------------------

 

false
false
------------------
true
true
------------------
true
true
------------------

再舉一個案例:

public class Main {
    public static void main(String[] args) {
        float f6 = 10000003.87f;//整數位8位,總共10位
        float f_8 = 100000003.87f;//整數位9位,總共11位
        
        System.out.println(f6==10000003);

        System.out.println(f_8==100000003);
    }
}

輸出結果:

false

true

 

 

上面兩個案例說明,float和double的精確度是按照整體位數來的,並不是只是考慮小數部分。根據顯示結果可以看出,float只能精確8位,double可以精確比較到17位,超出比較的精度就會得到錯誤的結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM