2014-02-23 22 views

回答

4

「不一致性」與浮點數相減無關,而是JavaScript顯示數字(它也完全一致)的結果。

正如你所說,1.1是不可代表的,所以它的價值實際上不是1.1。相反,它的值是:

1.100000000000000088817841970012523233890533447265625 

減去2.0這個值是準確的,並且結果是:

0.899999999999999911182158029987476766109466552734375 

這個數字是不是最近表示數以0.9(這將是0.90000000000000002220446049250313080847263336181640625)所以如果它打印爲0.9,該值將不會經歷往返到十進制和後退(能夠將數字往返到它們的十進制表示,而後退是一個非常理想的屬性)。因此,不是用足夠的精度打印到指定正確的值:

0.8999999999999999 

在第二個例子中,我們從4.0減去,並得到:

2.899999999999999911182158029987476766109466552734375 

最接近的可表示數2.9(下一個最接近的數字是2.9000000000000003552713678800500929355621337890625),因此它可以打印爲2.9,並且仍然具有經歷往返行程的值。