2012-11-09 46 views
1

我已經處理真的很大的雙值,我必須將它們四捨五入到下一個完整數字。如果我四捨五入的價值,我總是收到價值9.223372036854776E18恰好是最大的長期價值。我如何將比這更大的值舍入?如何在Java中舍入大於long類型最大值的數字?

編輯:只是澄清:我不是Java程序員,來自C前端。我正在幫助這個案子的朋友。我嘗試過無符號(顯然不工作),Google搜索並找到BigDecimal和BigInteger。試圖鑄造他們,它碰巧崩潰。這就是我來這裏的原因。謝謝你幫助我!

回答

5

BigDecimal將是包含大於long的值的解決方案。

閱讀本BigDecimal javadoc

您需要實例BigDecimal(yourDoubleValue);不投。

+0

我已經嘗試將BigDecimal和BigInteger的double值賦值。但它每次都會崩潰。 –

+0

請提供異常信息和您嘗試過的代碼。 – kosa

+3

@Tom:在基本類型和引用類型之間不存在鑄造。你應該做'BigDecimal.valueOf(doubleValue)'; –

2

BigDecimal可以容納任何double和float值。從雙轉換爲BigDecimal,使用如下代碼:

double reallyBigDouble 
BigDecimal x = new BigDecimal(reallyBigDouble); 

進行四捨五入爲最接近的整數值,可以使用這樣的代碼:

BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED)); 
2

本質:

Math.floor(d+0.5) 

但如果d爲負數,則必須調整爲減法。

+0

這實際上是我的問題最簡單的解決方案。謝謝! –

2

任何double值太大,無法放入long已經代表整數值,舍入它將不起作用。這是因爲double只在其有效位數上保留了52位的精度,而long則保留了64位 - 所以如果該值對於long來說太大,則double沒有足夠的精度保留任何小數部分。

相關問題