1. 程式人生 > >float和double的區別

float和double的區別

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。