我在测试一些涉及到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
1e-2147483647
是一个非常大的数字。准确来说,log_2(10^2147483647) / 8 / 1024^3 = 0.83...
应该能够计算出表示这样一个大整数所需的最小大小(以Gigabytes为单位)。也许这是一些内存分配问题吗? - Turing85