2

将字符串转换为数字会产生递增的值:

var n = '9999999999999999';
console.log(n); // -> 9999999999999999
var nn = Number(n)
console.log(nn); // -> 10000000000000000

如何避免这种情况?

4

1 回答 1

2

9999999999999999在 JavaScript 内部被视为浮点数。它不能用IEEE 754双精度精确表示,因为它需要 54 位精度(位数log2(9999999999999999)= 53.150849512,并且由于不存在小数位,因此结果必须向上取整)而 IEEE 754 仅提供 53 位(1隐含位 + 52 个显式存储的尾数位) - 少一位。因此,数字只是四舍五入。

由于在这种情况下只丢失了一位,因此即使是 54 位的数字也可以精确表示,因为它们仍然在该位中包含 0,这会丢失。考虑到 IEEE 754 的默认无偏舍入模式,奇数 54 位数字被舍入到恰好是 53 位偶数的两倍的最接近的值。

[资源]

于 2013-05-10T13:21:35.883 回答