我已經處理真的很大的雙值,我必須將它們四捨五入到下一個完整數字。如果我四捨五入的價值,我總是收到價值9.223372036854776E18恰好是最大的長期價值。我如何將比這更大的值舍入?如何在Java中舍入大於long類型最大值的數字?
編輯:只是澄清:我不是Java程序員,來自C前端。我正在幫助這個案子的朋友。我嘗試過無符號(顯然不工作),Google搜索並找到BigDecimal和BigInteger。試圖鑄造他們,它碰巧崩潰。這就是我來這裏的原因。謝謝你幫助我!
我已經處理真的很大的雙值,我必須將它們四捨五入到下一個完整數字。如果我四捨五入的價值,我總是收到價值9.223372036854776E18恰好是最大的長期價值。我如何將比這更大的值舍入?如何在Java中舍入大於long類型最大值的數字?
編輯:只是澄清:我不是Java程序員,來自C前端。我正在幫助這個案子的朋友。我嘗試過無符號(顯然不工作),Google搜索並找到BigDecimal和BigInteger。試圖鑄造他們,它碰巧崩潰。這就是我來這裏的原因。謝謝你幫助我!
BigDecimal可以容納任何double和float值。從雙轉換爲BigDecimal,使用如下代碼:
double reallyBigDouble
BigDecimal x = new BigDecimal(reallyBigDouble);
進行四捨五入爲最接近的整數值,可以使用這樣的代碼:
BigDecimal roundedToInteger = x.round(new MathContext(MathContext.UNLIMITED));
本質:
Math.floor(d+0.5)
但如果d
爲負數,則必須調整爲減法。
這實際上是我的問題最簡單的解決方案。謝謝! –
任何double
值太大,無法放入long
已經代表整數值,舍入它將不起作用。這是因爲double只在其有效位數上保留了52位的精度,而long則保留了64位 - 所以如果該值對於long
來說太大,則double
沒有足夠的精度保留任何小數部分。
我已經嘗試將BigDecimal和BigInteger的double值賦值。但它每次都會崩潰。 –
請提供異常信息和您嘗試過的代碼。 – kosa
@Tom:在基本類型和引用類型之間不存在鑄造。你應該做'BigDecimal.valueOf(doubleValue)'; –