java.lang.ArithmeticException: Rounding necessary

以下不會出現問題:

   System.out.println(new BigDecimal("1225.12").setScale(2));
   System.out.println(new BigDecimal("1225.1").setScale(2));
   System.out.println(new BigDecimal("1225").setScale(2));

如下代碼就是導致問題的原因:

   System.out.println(new BigDecimal("1225.120").setScale(2));//不會出錯
   System.out.println(new BigDecimal("1225.121").setScale(2));//出錯原因精度丟失問題,要指定舍入模式即可


解決方案如下:


以下是源代碼,兩個方法設置舍入模式:

 public BigDecimal setScale(int newScale, RoundingMode roundingMode) {
        return setScale(newScale, roundingMode.oldMode);
}

 public BigDecimal setScale(int newScale, int roundingMode) {//代碼省略}
以下兩種都是一樣,前者是定義在enum類中的,後者是BigDecimal本類的定義的靜態常量。

new BigDecimal("1225.125").setScale(2, RoundingMode.HALF_UP)
new BigDecimal("1225.121").setScale(2,BigDecimal.ROUND_HALF_UP)


以上兩種方式解決了精度丟失的問題。
————————————————
版權聲明:本文爲CSDN博主「_William_Cheung」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq496013218/article/details/70792655

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章