我正在运行一个奇怪的java错误,使用BigDecimal类中的intValue()。BigDecimal.intValue()返回意想不到的数字
我开始与3300028000.
当我调用下面的代码值:
int i = d.intValue();
返回:-994939296
任何的IDE,为什么会发生这种情况?
我正在运行一个奇怪的java错误,使用BigDecimal类中的intValue()。BigDecimal.intValue()返回意想不到的数字
我开始与3300028000.
当我调用下面的代码值:
int i = d.intValue();
返回:-994939296
任何的IDE,为什么会发生这种情况?
当你试图将这个数字放入一个int变量时,它会溢出,因为Java中的int类型有32位,所以如果一个int变量可以存储范围从-2,147,483,648到2,147,483,647的值。
要存储BigInteger的值,必须使用long变量。试试这个:
long value = d.longValue();
int不能保存一个很大的值,所以会溢出。尝试使用很长时间。
你真的应该责备之前阅读Java API:
将此BigDecimal转换为int。这种转换类似于 缩小原语从double到short的转换,如 The Java™Language Specification第5.1.3节中所定义:此BigDecimal的任何小数部分 将被丢弃,并且如果得到的结果为 “BigInteger”也是大到适合int,只返回低位32位 。请注意,此转换可能会丢失有关此BigDecimal值的整体大小和精度的信息,以及 会返回相反符号的结果。
我不知道你为什么需要BigDecimal的int值,但类BigDecimal包含很多方法来满足你的请求。
compareTo
add
substract
multiply
divide
等。
我会用自己的BigDecimal工作。迟早;将BigDecimal类型转换为其他基元类型最终会出现错误。因为他们都有限制。
'longValue'存在同样的问题,仅供参考,它只是需要更大的值,然后才开始看到溢出。 – 2012-02-24 19:53:11
正确。要将您的值存储在长变量中,您需要确保它不会超过签名的64位。如果您的BigInteger值可以并且将大于64位,则应将其保存到BigValue对象中。 – 2012-02-24 19:57:05
什么是BigValue? – 2012-02-24 21:58:18