Java intValue()返回意外的数字

Java intValue()返回意外的数字,java,bigdecimal,Java,Bigdecimal,我使用BigDecimal类中的intValue()遇到了一个奇怪的java错误 我从3300028000开始 当我调用以下代码时: int i = d.intValue(); 它返回:-994939296 有没有关于为什么会发生这种情况的IDE?int不能保存那么大的值,所以它会溢出。尝试使用long.当您尝试将此数字放入int变量时,它会溢出,因为Java中的int类型有32位,因此int变量可以存储从−2147483648至2147483647 要存储BigInteger的值,必须使用长

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

我从3300028000开始

当我调用以下代码时:

int i = d.intValue();
它返回:-994939296


有没有关于为什么会发生这种情况的IDE?

int不能保存那么大的值,所以它会溢出。尝试使用long.

当您尝试将此数字放入int变量时,它会溢出,因为Java中的int类型有32位,因此int变量可以存储从−2147483648至2147483647

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

long value = d.longValue();
在指责它之前,你应该认真阅读:

将此BigDecimal转换为整数。此转换类似于 中定义的从双精度到短精度的缩小原语转换 Java规范第5.1.3节™ 语言规范:任何小数部分 将丢弃此BigDecimal的 “BigInteger”太大,无法放入整数,只能放入低位32位 他们回来了。请注意,此转换可能会丢失有关 此大十进制值的总体大小和精度以及 返回带相反符号的结果


您希望它返回什么?:)

如以下文件所述:

如果生成的“BigInteger”太大而无法放入int,则只有 返回低阶32位


另一方面,将引发异常。

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

compareTo 
add 
substract 
multiply 
divide
等等


我会和BigDecimal一起工作。迟早将BigDecimal类型转换为其他基元类型将导致错误。因为它们都有一个极限。

longValue
也有同样的风险,仅供参考,在看到溢出之前,它只需要更大的值。正确。要将值存储在长变量中,需要确保它不会大于64位。如果您的BigInteger值可以并且将大于64位,则应将其保存在BigValue对象中。抱歉,这是一个输入错误。我是说大整数。