(1)在內存中佔有的字節數不同
單精度浮點數在機內佔4個字節
雙精度浮點數在機內佔8個字節
(2)有效數字位數不同
單精度浮點數有效數字8位
雙精度浮點數有效數字16位
(3)所能表示數的範圍不同
單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38(10的-38次方到10的38次方)
雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308(10的-308次方到10的308次方)
(4)在程序中處理速度不同
一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快
請看題:
問, 結果是多少? 0.01?
No! 結果是0.009999999999999998!
爲什麼會這樣呢? 因爲float和double都是浮點數, 都有取值範圍, 都有精度範圍. 浮點數與通常使用的小數不同, 使用中, 往往難以確定. 常見的問題是定義了一個浮點數, 經過一系列的計算, 它本來應該等於某個確定值, 但實際上並不是!double相減會轉換成二進制,因double有效位數爲 16位這就會出現存儲小數位數不夠的情況,這種情況下就會出現誤差,解決方法就是使用BigDecimal,它的有效長度足夠長可存儲 小數位數因此可代替double來進行加減乘除, 金額必須是完全精確的計算, 故不能使用double或者float, 而應該採用java.math.BigDecimal數據類型注意事項:
1、Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
System.out.println(c == d);
System.out.println(e == f);
輸出 true false
Integer爲對象判斷是否相等還是使用equals最靠譜,int爲基本類型,判斷是否相等就是可以使用==。因爲cache中已有-128到127,不在這範圍的會新new ,這時可以理解比較是內存地址,也就是是不是同一對象。所以說當Integer的值不在-128到127的時候使用==方法判斷是否相等就會出錯,在這個範圍之內的就會沒有問題!