float和double的區別
阿新 • • 發佈:2019-01-31
1.float f=3.4;是否正確?
答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.4; 或者寫成float f =3.4F;。
單精度浮點數(float)與雙精度浮點數(double)的區別如下:
(1)在記憶體中佔有的位元組數不同
(2)有效數字位數不同
(3)所能表示數的範圍不同
單精度浮點的表示範圍:-3.40E+38 ~ +3.40E+38
雙精度浮點的表示範圍:-1.79E+308 ~ +1.79E+308
(4)在程式中處理速度不同一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快
(5) java中byte< short< int< long< float< double,這是低階型別到高階型別的!注意高精度與敵精度的轉化
問題:什麼時候用float 什麼時候用double型別?
1)宣告:float a = 1.1f; double a = 1.1;
也就是說,後面不加f的話,預設就是double。如果用float來接收就會報錯。
2)有效數字:float 是8位有效數字,比如說:float a = 1.11111111111;輸出a的話 會發現a的值為:1.1111112
這裡有一個疑問,無論第九位是否大於5,在取值的時候都會向第八位進1。
這樣來看,根據業務來判斷需要接收型別的精度,如果要求高的話,就是用double。
3)效率:雙精度double的處理效率高於float,小程式無所謂。但是對效能要求比較高並且對精度要求不高的情況可以使用float。