繁体   English   中英

Java BigDecimal可能溢出错误

[英]Java BigDecimal Possible Overflow Bug

我正在测试一些涉及BigDecimal代码的边界条件,我注意到当使用字符串"1e2147483647"初始化BigDecimal时,它会出现意外行为。 它似乎的值介于01e-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

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

在第2585行追踪BigDecimal的源代码this.precision()为1, this.scale-2147483647 this.precision() - this.scale因此溢出,并且未正确处理以下溢出。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM