Java BigDecimal可能溢出错误

DJM*_*000 78 java bigdecimal

我正在测试一些涉及a的代码的边界条件BigDecimal,我注意到当BigDecimal使用String初始化a时,"1e2147483647"它会出现意外行为.它似乎在0和之间有一个值1e-2147483647.当我试着打电话时intValue(),我得到一个NegativeArraySizeException.我应该注意,这2147483647是我系统上整数的最大值.我做错了什么,或者这是一个问题BigDecimal

BigDecimal test = new BigDecimal("1e2147483647");

test.compareTo(new BigDecimal(0));  //Returns 1
test.compareTo(new BigDecimal("1e-2147483647"));  //Returns -1
test.intValue();  //Throws NegativeArraySizeException
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 87

不,你似乎有一个合法的错误.该错误在JDK7中呈现,但在JDK8中已修复.您的值可以正确表示为BigDecimals,并且应该表现正确,但不能.

跟踪2585行的源代码BigDecimalthis.precision()是1,而且this.scale-2147483647. this.precision() - this.scale因此溢出,并且未正确处理以下溢出.

通过算术中进行减法,在JDK8中修复了此错误.long