1. float 和 double 的區(qū)別是什么?
1.1 內(nèi)存中占有的字節(jié)數(shù)不同 單精度浮點(diǎn)數(shù)在內(nèi)存中占有4個(gè)字節(jié); 雙精度浮點(diǎn)數(shù)在內(nèi)存中占有8個(gè)字節(jié);
1.2 有效數(shù)字位數(shù)不同 單精度浮點(diǎn)數(shù)有效數(shù)字8位; 雙精度浮點(diǎn)數(shù)有效數(shù)字16位;
1.3 數(shù)值取值范圍不同 單精度浮點(diǎn)數(shù)的表示范圍:-3.40E+38~3.40E+38 雙精度浮點(diǎn)數(shù)的表示范圍:-1.79E+308~-1.79E+308
1.4 在程序中處理速度不同 一般來說,CPU處理單精度浮點(diǎn)數(shù)的速度比雙精度浮點(diǎn)數(shù)的速度快; 如果不聲明,默認(rèn)小數(shù)是double類型,如果想用float,要進(jìn)行強(qiáng)轉(zhuǎn)。
2. 舉例 float f = 1.3;會(huì)編譯報(bào)錯(cuò),正確的寫法是float f = (float)1.3;或者float a = 1.3f;(f或F都可以不區(qū)分大小寫)
3. 注意 float是八位有效數(shù)字,第七位會(huì)四舍五入。
4. 面試題
4.1 java中3*0.1==0.3將會(huì)返回什么?true還是false?
答:返回false,因?yàn)楦↑c(diǎn)數(shù)不能完全精確的表示出來,一般會(huì)損失精度;
4.2 java中float f = 3.4;是否正確?
答:不正確。因?yàn)?.4是雙精度浮點(diǎn)數(shù),將雙精度賦給單精度屬于向下轉(zhuǎn)型,會(huì)造成精度損失,因此需要強(qiáng)制類型轉(zhuǎn)換float=(float)3.4;或者寫成float f = 3.4f;