我正在運行一個奇怪的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