为什么解析大量字符串形式的数字会给出更大的数字?
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 这已经解释过了。
查看片段:
var num = "9223372036854775808";
document.write(num);
document.write("<br>");
document.write(parseInt(num, 10));
在 运行 代码片段上,第一次写入产生:
9223372036854775808
第三次写入产生:
9223372036854776000
但是,我只是将字符串形式的数字解析为数字。为什么它给出的数字更大?
我以为它可能必须做一些存储容量限制的事情,但是,如果它不能存储较小的数字,为什么它会产生更大的数字?
我读了这个问题:parseInt
doc但他们没有太大帮助。
那么,为什么要解析一个字符串形式的大数字,return一个更大的数字?
第一个结果很好,因为它被视为一个字符串。
在第二个中,它越过int的值+/- 9007199254740992即parseint可以解析的最大值是9007199254740992,因为你的值9223372036854775808更大大于最大值。 它提供了一些垃圾值。
正如 blunderboy 正确评论的那样,似乎原因可能是这个
Javascript中的数字是 64 位 "double" 精度,遵循 IEE754 浮点数。因此,可以准确表示的最大正整数是 2^53,其余位保留给指数。
如果你检查 ECMA specs 这已经解释过了。