int a = 200000;
double b =(double)(a * a);
我希望能够计算(a a)(整数)是否已经太大(stackOverflow)而无法容纳在变量中;在这种情况下,我知道乘以(a a)会导致一个不适合的int->数字将是错误的;
我不明白的是我该如何计算。如何查看一个值是否不适合int变量?
是否有一种方法可以不使用方法,而只需使用普通代码和常识? ;-)
最诚挚的问候,
Wouter
答案 0 :(得分:2)
可能的解决方案:
int a = 200000;
try {
int result = Math.multiplyExact(x, y);
} catch(ArithmeticException e) {
//if you get here, it is too big
}
另一个
long test = (long)a*(long)a;
if (test > Integer.MAX_VALUE || test < Integer.MIN_VALUE)
// Overflow!
答案 1 :(得分:1)
您可以使用Integer包装器类中的常量MAX_VALUE并将其强制转换为long(如果强制转换为double但超出其范围,则会出现编译错误)
int a = 200000;
long b = (long) a * (long) a;
if (b > Integer.MAX_VALUE) {
// do something
}
MAX_VALUE对应于整数可以为(2 ^ 31)-1
的最大值