2014-10-29 30 views
-1

我正在調試我的程序,其中某些雙打和浮動不相等。我已經在這裏發佈了這個答案之前尋找答案,爲什麼會發生這種情況,但找不到相關信息。例如:Java平等的浮動和雙打

System.out.println(4.4f == 4.4); 

這將打印錯誤,同時,

System.out.println(4.5f == 4.5); 

打印true。

有人可以說明爲什麼這是在JAVA的情況?

+2

這不是Java的情況。浮點數就是這種情況。 – DwB 2014-10-29 18:46:11

+1

這個問題每週都會以兩種形式提出。提示:有無限的小數值,但只有2^32浮點值和2^64雙精度值。 – 2014-10-29 18:47:14

回答

5

當您編寫4.4f時,結果爲最接近的值可表示爲float與真值4.4。

當您編寫4.4時,表示最接近的值可表示爲double與值4.4。

當您編寫4.4f == 4.4時,測試可表示爲float的最接近的值是否仍然是最接近的值,表示爲double至4.4,這是錯誤的; double具有更高的精確度,並且floatdouble都不能完全表示4.4。

Both float and doublecan然而,它們恰好代表4.5;因爲他們正在使用二進制分數,而4.5是一個確切的二進制分數,所以可以正常工作。