Javascript 對數字類型的支持

注意,因爲 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,所以返回trueco

總之,若是對數據精度的要求較高,不建議使用Number.isInteger()判斷一個數值是否爲整數。參數

相關文章
相關標籤/搜索