当数字字符串在+/- 2 ^ 53范围内时,代码评估true
,当字符串在该范围之外时,代码评估为假。
num_string = "9007199254740992"
new_num = (new Number(num_string)+"")
num_string === new_num
这似乎有效,但检测数字溢出的正确方法是什么?例如,如果初始字符串具有前导零007
,则会失败。这不是溢出,不应该失败。
答案 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)