将字符串转换为数字会产生递增的值:
var n = '9999999999999999';
console.log(n); // -> 9999999999999999
var nn = Number(n)
console.log(nn); // -> 10000000000000000
如何避免这种情况?
将字符串转换为数字会产生递增的值:
var n = '9999999999999999';
console.log(n); // -> 9999999999999999
var nn = Number(n)
console.log(nn); // -> 10000000000000000
如何避免这种情况?
9999999999999999
在 JavaScript 内部被视为浮点数。它不能用IEEE 754双精度精确表示,因为它需要 54 位精度(位数log2(9999999999999999)
= 53.150849512,并且由于不存在小数位,因此结果必须向上取整)而 IEEE 754 仅提供 53 位(1隐含位 + 52 个显式存储的尾数位) - 少一位。因此,数字只是四舍五入。
由于在这种情况下只丢失了一位,因此即使是 54 位的数字也可以精确表示,因为它们仍然在该位中包含 0,这会丢失。考虑到 IEEE 754 的默认无偏舍入模式,奇数 54 位数字被舍入到恰好是 53 位偶数的两倍的最接近的值。