在base10字符串转换时检测JavaScript中的数字溢出

时间:2015-03-19 16:57:57

标签: javascript

当数字字符串在+/- 2 ^ 53范围内时,代码评估true,当字符串在该范围之外时,代码评估为假。

num_string = "9007199254740992"
new_num = (new Number(num_string)+"")
num_string === new_num

这似乎有效,但检测数字溢出的正确方法是什么?例如,如果初始字符串具有前导零007,则会失败。这不是溢出,不应该失败。

编辑:我必须使用一个字符串,我正在从一个字符串转换为一个数字,并想知道我的数字是否搞砸了。所以,我正在测试一个字符串(不是数字)。

1 个答案:

答案 0 :(得分:2)

您不需要使用字符串:

9007199254740993 === 9007199254740992 // true

但是,您应该检查Number.MAX_SAFE_INTEGER,这将告诉您可以使用的最高整数,而不会损失精度。

Number.MAX_SAFE_INTEGER // 9007199254740991

所以检查一下:

if (num > Number.MAX_SAFE_INTEGER) {
  // not safe!
}

您还可以使用功能(信用到@RickHitchcock):

Number.isSafeInteger(num)