请看下面的代码
double a = 0.001;
double b = 13.456;
System.out.println(a);
System.out.println(b);
System.out.println(a+b);
System.out.println(b-a);
运算的结果是
0.001
13.456
13.456999999999999
13.455;
表示对结果不太理解,难道ab相加的结果不应该是13.457么
高洛峰2017-04-17 17:43:32
這是因為在計算機中浮點數有可能(注意是可能)是不準確的,它只能無限接近準確值,而不能完全精確。為什麼會如此呢?這是由浮點數的儲存規則決定的,我們先來看0.4這個十進制小數如何轉換成二進制小數,使用“乘2取整,順序排列”法(不懂?這就沒招了,太基礎了),我們發現0.4不能使用二進制準確的表示,在二進制數世界裡它是一個無限循環的小數,也就是說,“展示”都不能“展示”,更別說是在內存中存儲了(浮點數的儲存包括三個部分:符號位、指數位、尾數,具體不再介紹),可以這樣理解,在十進制的世界裡沒有辦法準確表示1/3,那在二進制世界裡當然也無法準確表示1/5 (如果二進制也有分數的話倒是可以表示),在二進制的世界裡1/5是一個無限循環小數。