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()判断一个数值是否为整数。参数

相关文章
相关标签/搜索