根據(jù)雙精度浮點數(shù)的定義峻黍,Number 類型中有效的整數(shù)范圍是 -0x1fffffffffffff 至 0x1fffffffffffff躁劣,所以 Number 無法精確表示此范圍外的整數(shù)促煮。
同樣根據(jù)浮點數(shù)的定義邮屁,非整數(shù)的 Number 類型無法用 ==(=== 也不行) 來比較,一段著名的代碼菠齿,這也正是我們第三題的問題佑吝,為什么在 JavaScript 中,0.1+0.2 不能 =0.3:
console.log( 0.1 + 0.2 == 0.3); // false
所以實際上泞当,這里錯誤的不是結(jié)論,而是比較的方法民珍,正確的比較方法是使用 JavaScript 提供的最小精度值:
檢查等式左右兩邊差的絕對值是否小于最小精度襟士,才是正確的比較浮點數(shù)的方法。這段代碼結(jié)果就是 true 了嚷量。
console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON); // true