-1
該表達式(2.0 - 1.1)返回0.8999999999999999。
但是這個(4.0 - 1.1)返回2.9。
任何人都可以解釋這種不一致嗎?
我知道1.1不能用浮點表示。
該表達式(2.0 - 1.1)返回0.8999999999999999。
但是這個(4.0 - 1.1)返回2.9。
任何人都可以解釋這種不一致嗎?
我知道1.1不能用浮點表示。
「不一致性」與浮點數相減無關,而是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
,並且仍然具有經歷往返行程的值。