BigDecimal.intValue()返回Unexpected Number

时间:2012-02-24 19:23:27

标签: java bigdecimal

我使用BigDecimal类中的intValue()遇到了一个奇怪的java bug。

我的值是3300028000.

当我拨打以下代码时:

int i = d.intValue();

它返回:-994939296

为什么会发生这种情况的任何想法?

5 个答案:

答案 0 :(得分:4)

int不能保存大的值,因此溢出。尝试使用很长的。

答案 1 :(得分:3)

当你试图将这个数字装入int变量时,它会溢出,因为Java中的int类型有32位,ergo和int变量可以存储从-2,147,483,648到2,147,483,647的值。

要存储BigInteger的值,您必须使用long变量。试试这个:

long value = d.longValue();

答案 2 :(得分:2)

您希望它返回什么? :)

javadocs

中所述
  

如果产生" BigInteger"太大了,不适合int,只有   返回低位32位

另一方面,

intValueExact会引发异常。

答案 3 :(得分:1)

在指责之前你应该真正阅读Java API

  

将此BigDecimal转换为int。这种转换类似于   缩小的原始转换从double到short定义为   Java™语言规范的5.1.3节:任何小数部分   这个BigDecimal将被丢弃,如果产生的话   “BigInteger”太大而不适合int,只有低位32位   被退回。请注意,此转换可能会丢失有关的信息   此BigDecimal值的总体幅度和精度以及   以相反的符号返回结果。

答案 4 :(得分:0)

我不知道你为什么需要BigDecimal的int值,但是BigDecimal类包含许多方法来满足你的请求。

compareTo 
add 
substract 
multiply 
divide

等。

我会使用BigDecimal本身。迟早;将BigDecimal类型转换为其他基元类型将最终出现错误。因为所有这些都有限制。