为什么解析大量字符串形式的数字会给出更大的数字?

Why does parsing a large number, of string form, give a larger number?

查看片段:

var num = "9223372036854775808";
document.write(num);
document.write("<br>");
document.write(parseInt(num, 10));

在 运行 代码片段上,第一次写入产生:

9223372036854775808

第三次写入产生:

9223372036854776000

但是,我只是将字符串形式的数字解析为数字。为什么它给出的数字更大?

我以为它可能必须做一些存储容量限制的事情,但是,如果它不能存储较小的数字,为什么它会产生更大的数字?

我读了这个问题: and the parseInt doc但他们没有太大帮助。

那么,为什么要解析一个字符串形式的大数字,return一个更大的数字?

第一个结果很好,因为它被视为一个字符串。

在第二个中,它越过int的值+/- 9007199254740992即parseint可以解析的最大值是9007199254740992,因为你的值9223372036854775808更大大于最大值。 它提供了一些垃圾值。

正如 blunderboy 正确评论的那样,似乎原因可能是这个

Javascript中的数字是 64 位 "double" 精度,遵循 IEE754 浮点数。因此,可以准确表示的最大正整数是 2^53,其余位保留给指数。

如果你检查 ECMA specs 这已经解释过了。