float和double區(qū)別?
兩者的主要區(qū)別如下:
01.在內(nèi)存中占有的字節(jié)數(shù)不同
單精度浮點數(shù)在機內(nèi)存占4個字節(jié)
雙精度浮點數(shù)在機內(nèi)存占8個字節(jié)
02.有效數(shù)字位數(shù)不同
單精度浮點數(shù)有效數(shù)字8位
雙精度浮點數(shù)有效數(shù)字16位
03.數(shù)值取值范圍
單精度浮點數(shù)的表示范圍:-3.40E+38~3.40E+38
雙精度浮點數(shù)的表示范圍:-1.79E+308~-1.79E+308
04.在程序中處理速度不同
一般來說,CPU處理單精度浮點數(shù)的速度比處理雙精度浮點數(shù)快
如果不聲明,默認小數(shù)為double類型,所以如果要用float的話,必須進行強轉(zhuǎn)
例如:float a=1.3; 會編譯報錯,正確的寫法 float a = (float)1.3;或者float a = 1.3f;(f或F都可以不區(qū)分大小寫)
注意:float是8位有效數(shù)字,第7位數(shù)字將會四舍五入
面試題:
1.java中3*0.1==0.3將會返回什么?true還是false?
fale,因為浮點數(shù)不能完全精確的表示出來,一般會損失精度。
2.java中float f = 3.4;是否正確?
不正確,3.4是雙精度數(shù),將雙精度型(double)賦值給浮點型(float)屬于向下轉(zhuǎn)型會造 成精度損失,因此需要強制類型轉(zhuǎn)換float f = (float)3.4;或者寫成 float f = 3.4f;才可以。