我確定這將是一個簡單的問題來回答,但我不能爲我的生活決定什麼必須做。所以這裏是:假設我們遵循使用BigDecimal
進行財務計算的「最佳實踐」,那麼如何處理引發異常的東西(計算)呢?作爲例子:假設我必須拆分「用戶數量」來投資「n」個不同實體之間的債券。現在考慮用戶提交100美元投資分成3個債券的情況。等效代碼是這樣:用於財務計算和非終止計算的Bigdecimal
public static void main(String[] args) throws Exception {
BigDecimal bd1 = new BigDecimal("100.0");
BigDecimal bd2 = new BigDecimal("3");
System.out.println(bd1.divide(bd2));
}
但我們都知道,由於分工不終止這個特殊的代碼片段將拋出一個ArithmeticException
。在計算中使用無限精度數據類型時,如何在代碼中處理這些場景?
TIA,
佐助
更新:鑑於RoundingMode
將有助於解決這個問題,接下來的問題是,爲什麼100.0/3不代替33.33 33.3? 33.33不會是一個「更準確」的答案,因爲你期望33美分而不是30美分?有什麼辦法可以調整它嗎?
除法方法也有重載的實現,指定舍入模式請參閱此鏈接(http://download.oracle.com/javase/6/docs/api/java/math/RoundingMode.html) –
@sasuke,on你的更新:我測試過'bd1.divide(bd2,2,RoundingMode.HALF_EVEN)'([如下所示](http://stackoverflow.com/questions/7618812/bigdecimal-for-financial-calculations-and-non - 終止計算/ 7618840#7618840))和結果是33.33' – krock
@ krock:再次感謝您的幫助;非常感激。 :) – sasuke