java浮點(diǎn)數(shù)默認(rèn)類型 為何浮點(diǎn)數(shù)可能丟失精度?
為何浮點(diǎn)數(shù)可能丟失精度?并不是說(shuō)Java浮點(diǎn)數(shù)的精度會(huì)丟失,而是存儲(chǔ)在二進(jìn)制中的所有浮點(diǎn)數(shù)都可能會(huì)丟失精度(有些特殊的十進(jìn)制值可以精確表示),所以存儲(chǔ)在計(jì)算機(jī)中的浮點(diǎn)數(shù)有丟失精度的風(fēng)險(xiǎn),但是丟失的精度
為何浮點(diǎn)數(shù)可能丟失精度?
并不是說(shuō)Java浮點(diǎn)數(shù)的精度會(huì)丟失,而是存儲(chǔ)在二進(jìn)制中的所有浮點(diǎn)數(shù)都可能會(huì)丟失精度(有些特殊的十進(jìn)制值可以精確表示),所以存儲(chǔ)在計(jì)算機(jī)中的浮點(diǎn)數(shù)有丟失精度的風(fēng)險(xiǎn),但是丟失的精度不會(huì)影響我們的正常使用。當(dāng)小數(shù)轉(zhuǎn)換成二進(jìn)制時(shí),它們不一定用精確的二進(jìn)制來(lái)表示,大多數(shù)情況下它們被當(dāng)作近似值,這會(huì)導(dǎo)致精度的損失。如果用二進(jìn)制進(jìn)行計(jì)算,顯然會(huì)進(jìn)一步損失計(jì)算結(jié)果的準(zhǔn)確性。舉個(gè)簡(jiǎn)單的例子,0.1用二進(jìn)制表示(十進(jìn)制和二進(jìn)制轉(zhuǎn)換法)(1)0.1×2=0.2,0.0(2)0.2×2=0.4,0.00(3)0.4×2=0.8,0.000(4)0.8×2=1.6,0.0001(5)0.6×2=0.2,0.00011(6)0.2×2=0.4,0.000110(7)0.4×2=0.8取整數(shù)0得到0.0001100(8)0.8×2=1.6取整數(shù)1得到0.00011001(9)0.6x 2=1.2取整數(shù)1得到0.000110011(n)。。。得到一個(gè)無(wú)限循環(huán)的二進(jìn)制十進(jìn)制0.000110011沒(méi)有辦法用一個(gè)精確的二進(jìn)制來(lái)表示0.1。而且計(jì)算機(jī)中用來(lái)存儲(chǔ)浮點(diǎn)數(shù)的位數(shù)也是有限的,所以我們只能選擇以一定的精度保存。當(dāng)然,也有特殊的小數(shù),比如0.25的二進(jìn)制就是0.01