This question already has answers here:
Why is 9999999999999999 converted to 10000000000000000 in JavaScript?
(5个答案)
5年前关闭。
将字符串转换为数字会产生递增的值:
如何避免这种情况?
(5个答案)
5年前关闭。
将字符串转换为数字会产生递增的值:
var n = '9999999999999999';
console.log(n); // -> 9999999999999999
var nn = Number(n)
console.log(nn); // -> 10000000000000000
如何避免这种情况?
最佳答案
在JavaScript中9999999999999999
在内部被视为浮点数。它不能精确地表示为IEEE 754双精度,因为它需要54位精度(位数为log2(9999999999999999)
= 53.150849512,并且由于不存在小数位,因此必须提高结果),而IEEE 754仅提供53位(1个隐含位+ 52个显式存储的尾数位)-少一位。因此,数字只是四舍五入。
由于在这种情况下仅丢失一位,因此即使54位数字也可以精确表示,因为它们在位中仍然包含0,而这会丢失。鉴于IEEE 754的默认无偏四舍五入模式,奇数的54位数字被四舍五入为最接近的值,该值恰好是53位数字的两倍。
[Source]
09-18 02:23