如何知道数字达到极限整数

时间:2019-07-25 09:08:49

标签: javascript numbers int

  

假设我们正在处理的环境只能存储32位有符号整数范围内的整数:[− 2 31 ,2 31 − 1]。出于此问题的目的,假定您的函数在反向整数溢出时返回0。

我的问题是如何知道数字大于整数范围。 (对不起,我的英语)

2 个答案:

答案 0 :(得分:1)

您可以从Signed 32-bit integers中获取值并检查范围。

"MyWebACLAssociation": {
  "Type": "AWS::WAFRegional::WebACLAssociation",
  "Properties": {
    "ResourceArn": { "Ref": "MyLoadBalancer" },
    "WebACLId": { "Ref": "MyWebACL" }
  }
}

答案 1 :(得分:1)

由于JavaScript的数字不是整数(并且有很多更宽的范围),因此您可以将结果与所需范围进行比较:

 jsonD = json.dumps(htmlContent.text) converts the raw HTML content into a JSON 
 string representation. jsonL = json.loads(jsonD) parses the JSON string back into a 
 regular string/unicode object. This results in a no-op, as any escaping done by 
 dumps() is reverted by loads(). jsonL contains the same data as htmlContent.text.

 Try to use json.dumps to generate your final JSON instead of building the JSON by 
 hand:

 ContentUrl = json.dumps({
'url': str(urls),
'uid': str(uniqueID),
'page_content': htmlContent.text,
'date': finalDate
})

({if (result < -(2**31) || result > (2**31) - 1) { // Out of range } 是最新的幂运算符。对于较旧的JavaScript引擎,您可以改用**-Math.pow(2, 31)。当然,也可以预先计算:-2147483648和2147483647。)

或者,假设您的结果不是小数(它是一个整数),则可以使JavaScript使用按位运算符将其转换为32位带符号的int,并查看您是否仍然具有相同的数字:

Math.pow(2, 31) - 1

之所以可行,是因为按位if (result !== result|0) { // Out of range } 运算符将其两个操作数都转换为32位带符号的整数,进行按位OR运算,然后将结果转换回数字。因此,如果超出范围,您将不会得到相同的数字。