[英]Java BigDecimal Possible Overflow Bug
我正在测试一些涉及BigDecimal
代码的边界条件,我注意到当使用字符串"1e2147483647"
初始化BigDecimal
时,它会出现意外行为。 它似乎的值介于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
不,你似乎有一个合法的错误。 该错误在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.