我想处理将两个数字相乘会导致溢出的特殊情况。代码看起来像这样:
int a = 20; long b = 30; // if a or b are big enough, this result will silently overflow long c = a * b;
那是一个简化的版本。在实际程序中,a并且b在运行时从其他地方获取。我想要实现的是这样的:
a
b
long c; if (a * b will overflow) { c = Long.MAX_VALUE; } else { c = a * b; }
你如何建议我最好编写此代码?
更新:a和b总是非负在我的情况。
Java的8有Math.multiplyExact,Math.addExact等,为整数且长。这些会引发未经检查ArithmeticException的溢出。
Math.multiplyExact,Math.addExact
ArithmeticException