扫码关注官方订阅号
var a = 11111111111111111111; console.log(a); //chrome : 11111111111111110000 //nodejs : 11111111111111110000
求大神解释,为什么会打印出不相符的结果?
走同样的路,发现不同的人生
这个跟计算机中用于存储数字的方法有关. 你想想, 你这个整数都已经那么大啦, 忽略了那几百大小, 又有什么影响呢? 至于这是像IEEE754不能存储0.3那样的原因, 还是为了节省开销, 我也不清楚. 不过我们可以来做一个有趣的实验.
在控制台输入Number.MAX_VALUE, 打印出的数字是1.7976931348623157e+308, 注意数他的有效数字位数, 是17. 你试着打印179769313486231571, 最后添加的1也会变成0, 输入1234567890123456789, 会输出1234567890123456800, 可见17是他能达到的最大位数, 再大就会被置为0. 再看你的a, 是16位, 为什么呢? 可能是因为单身狗比较特殊.
JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。
或许你可以参考下这个
嘿嘿,点这里一峰es6安全整数 可以参考一下
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这个跟计算机中用于存储数字的方法有关. 你想想, 你这个整数都已经那么大啦, 忽略了那几百大小, 又有什么影响呢? 至于这是像IEEE754不能存储0.3那样的原因, 还是为了节省开销, 我也不清楚. 不过我们可以来做一个有趣的实验.
在控制台输入Number.MAX_VALUE, 打印出的数字是1.7976931348623157e+308, 注意数他的有效数字位数, 是17. 你试着打印179769313486231571, 最后添加的1也会变成0, 输入1234567890123456789, 会输出1234567890123456800, 可见17是他能达到的最大位数, 再大就会被置为0. 再看你的a, 是16位, 为什么呢? 可能是因为单身狗比较特殊.
JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。
或许你可以参考下这个
嘿嘿,点这里一峰es6安全整数 可以参考一下