注意,因爲 JavaScript 採用 IEEE 754 標準,數值存儲爲64位雙精度格式,數值精度最多能夠達到 53 個二進制位(1 個隱藏位與 52 個有效位)。若是數值的精度超過這個限度,第54位及後面的位就會被丟棄code
Number.isInteger(3.0000000000000002) // true
上面代碼中,Number.isInteger
的參數明明不是整數,可是會返回true
。緣由就是這個小數的精度達到了小數點後16個十進制位,轉成二進制位超過了53個二進制位,致使最後的那個2
被丟棄了。ip
console.log(3.0000000000000002 - 1);console
輸出: 2;二進制
相似的狀況還有,若是一個數值的絕對值小於Number.MIN_VALUE
(5E-324),即小於 JavaScript 可以分辨的最小值,會被自動轉爲 0。這時,Number.isInteger
也會誤判。數據
Number.isInteger(5E-324) // false Number.isInteger(5E-325) // true
上面代碼中,5E-325
因爲值過小,會被自動轉爲0,所以返回true
。co
總之,若是對數據精度的要求較高,不建議使用Number.isInteger()
判斷一個數值是否爲整數。參數