Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在base10字符串转换时检测JavaScript中的数字溢出_Javascript - Fatal编程技术网

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

在base10字符串转换时检测JavaScript中的数字溢出,javascript,Javascript,当数字字符串在+/-2^53范围内时,代码的计算结果为true,当数字字符串超出该范围时,代码的计算结果为false num_string = "9007199254740992" new_num = (new Number(num_string)+"") num_string === new_num 这似乎有效,但检测数字溢出的正确方法是什么?例如,如果初始字符串具有前导零007,则此操作将失败。这不是溢出,不应该失败 编辑:我必须使用字符串,我正在从字符串转换为数字,我想知道我的数字是否被

当数字字符串在+/-2^53范围内时,代码的计算结果为
true
,当数字字符串超出该范围时,代码的计算结果为false

num_string = "9007199254740992"
new_num = (new Number(num_string)+"")
num_string === new_num
这似乎有效,但检测数字溢出的正确方法是什么?例如,如果初始字符串具有前导零
007
,则此操作将失败。这不是溢出,不应该失败


编辑:我必须使用字符串,我正在从字符串转换为数字,我想知道我的数字是否被弄乱了。因此,我正在测试一个字符串(不是数字)。

您不需要使用字符串:

9007199254740993 === 9007199254740992 // true
但是,您应该检查
Number.MAX\u SAFE\u INTEGER
,它将告诉您可以使用的最高整数,而不会损失精度

Number.MAX_SAFE_INTEGER // 9007199254740991
因此,请检查:

if (num > Number.MAX_SAFE_INTEGER) {
  // not safe!
}
您还可以使用函数(贷记到):


@jcalfee314:无论
num
来自何方。关键是要与
Number.MAX\u SAFE\u INTEGER
进行比较。你说你自己把字符串转换成一个数字。那么,是什么阻止您进行这种比较呢?对第一个示例不满意,但是对于
Number.MAX_SAFE_INTEGER
@jcalfee314:
Number.MAX_SAFE_INTEGER
9007199254740991
<代码>9007199254740992始终大于
9007199254740991
。此外,并非每个大于
9007199254740991
的数字都会导致
9007199254740992
1234567890123456789018901234567890//12345678901000
。对于支持
number.MAX_SAFE_INTEGER
的浏览器,可以使用
number.isSafeInteger()
method:@jcalfee314:为什么要再次比较字符串?你必须提供更多的上下文来更好地解释你的情况。否则我认为你把事情弄得更复杂了。通过那次行动你想知道什么?如果您只想知道字符串是否可以转换为数字,那么这个方法就足够了。如果前导零可能是一个问题,请先删除它们(我不知道它们怎么会是一个问题,
Number('008')
工作正常并返回
8
)。
Number.isSafeInteger(num)