以下不會出現問題:
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