java在处理处理double数据时会出现精度缺失的问题
public static void main(String[] args) {
System.out.println(0.1+0.2);
}
使用BigDecimal类可以处理这类问题。BigDecimal用户处理java中小数运算误差的问题。2个BigDecimal对象通过以下方法进行加减乘除运算生成一个新的BigDecimal对象。
public BigDecimal add(BigDecimal augend); //加法运算
public BigDecimal subtract(BigDecimal augend);//减法运算
public BigDecimal multiply(BigDecimal augend);//乘法运算
public BigDecimal divide(BigDecimal augend);//除法运算
BigDecimal b1 = new BigDecimal("0.3");
BigDecimal b2 = new BigDecimal("0.2");
BigDecimal add = b1.add(b2);
System.out.println(b1);
System.out.println(b2);
System.out.println(add);
很有趣的是 使用BigDecimal进行运算时,当出现无限循环小数时会报
Exception in thread “main” java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
BigDecimal b1 = new BigDecimal("0.3");
BigDecimal b2 = new BigDecimal("1.0");
BigDecimal add = b2.divide(b1);
System.out.println(add);