比較基本類型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位,超出比較的精度就會得到錯誤的結果。