java浮點數默認類型 為何浮點數可能丟失精度?
為何浮點數可能丟失精度?并不是說Java浮點數的精度會丟失,而是存儲在二進制中的所有浮點數都可能會丟失精度(有些特殊的十進制值可以精確表示),所以存儲在計算機中的浮點數有丟失精度的風險,但是丟失的精度
為何浮點數可能丟失精度?
并不是說Java浮點數的精度會丟失,而是存儲在二進制中的所有浮點數都可能會丟失精度(有些特殊的十進制值可以精確表示),所以存儲在計算機中的浮點數有丟失精度的風險,但是丟失的精度不會影響我們的正常使用。當小數轉換成二進制時,它們不一定用精確的二進制來表示,大多數情況下它們被當作近似值,這會導致精度的損失。如果用二進制進行計算,顯然會進一步損失計算結果的準確性。舉個簡單的例子,0.1用二進制表示(十進制和二進制轉換法)(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取整數0得到0.0001100(8)0.8×2=1.6取整數1得到0.00011001(9)0.6x 2=1.2取整數1得到0.000110011(n)。。。得到一個無限循環的二進制十進制0.000110011沒有辦法用一個精確的二進制來表示0.1。而且計算機中用來存儲浮點數的位數也是有限的,所以我們只能選擇以一定的精度保存。當然,也有特殊的小數,比如0.25的二進制就是0.01