-1
我正在調試我的程序,其中某些雙打和浮動不相等。我已經在這裏發佈了這個答案之前尋找答案,爲什麼會發生這種情況,但找不到相關信息。例如:Java平等的浮動和雙打
System.out.println(4.4f == 4.4);
這將打印錯誤,同時,
System.out.println(4.5f == 4.5);
打印true。
有人可以說明爲什麼這是在JAVA的情況?
我正在調試我的程序,其中某些雙打和浮動不相等。我已經在這裏發佈了這個答案之前尋找答案,爲什麼會發生這種情況,但找不到相關信息。例如:Java平等的浮動和雙打
System.out.println(4.4f == 4.4);
這將打印錯誤,同時,
System.out.println(4.5f == 4.5);
打印true。
有人可以說明爲什麼這是在JAVA的情況?
當您編寫4.4f
時,結果爲最接近的值可表示爲float
與真值4.4。
當您編寫4.4
時,表示最接近的值可表示爲double
與值4.4。
當您編寫4.4f == 4.4
時,測試可表示爲float
的最接近的值是否仍然是最接近的值,表示爲double
至4.4,這是錯誤的; double
具有更高的精確度,並且float
和double
都不能完全表示4.4。
Both float
and double
can然而,它們恰好代表4.5;因爲他們正在使用二進制分數,而4.5是一個確切的二進制分數,所以可以正常工作。
這不是Java的情況。浮點數就是這種情況。 – DwB 2014-10-29 18:46:11
這個問題每週都會以兩種形式提出。提示:有無限的小數值,但只有2^32浮點值和2^64雙精度值。 – 2014-10-29 18:47:14