我使用BigDecimal类中的intValue()遇到了一个奇怪的java bug。
我的值是3300028000.
当我拨打以下代码时:
int i = d.intValue();
它返回:-994939296
为什么会发生这种情况的任何想法?
答案 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)
答案 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类型转换为其他基元类型将最终出现错误。因为所有这些都有限制。