Non-terminating decimal expansion; no exact representable decimal result.
BigDecimal b1=new BigDecimal(1);
BigDecimal b2=new BigDecimal(3);
BigDecimal b3=b1.divide(b2);
报错
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
BigDecimal 用于高精度的数学计算,这个异常翻译
java.lang.AthmeticException:非终止小数展开;没有可精确表示的十进制结果。
意思就是这个除法除不尽,会得到一个无限小数,导致异常。
解决办法:
BigDecimal b3=b1.divide(b2,2, RoundingMode.HALF_UP);
2表示保留2位小数
RoundingMode.HALF_UP 表示四舍五入。
setScale
设置精度
Double d = 111.123456;
BigDecimal bd = new BigDecimal(d);
BigDecimal bd1 = bd.setScale(2, BigDecimal.ROUND_HALF_UP);//111.12
表示保留2位小数,四舍五入。
DecimalFormat
格式换转换为字符串,设置保留精度
Double d = 111.123456;
BigDecimal bd = new BigDecimal(d);
DecimalFormat df = new DecimalFormat("#0.00");
String str1 = df.format(bd);
System.out.println(str1);//111.12