java BigDecimal使用

System.out.println(0.06+0.01);//0.06999999999999999
System.out.println(0.6+0.1);//0.7  实际也不是这么精确,这是显示的假象
BigDecimal addend = new BigDecimal(Double.valueOf(0.06));
BigDecimal augend =
new BigDecimal(Double.valueOf(0.01));
BigDecimal result = addend.add(augend);
System.
out.println(q1 + result.doubleValue()); //结果不精确

BigDecimal minuend =
new BigDecimal("1.0); //正确
BigDecimal subtrahend =
new BigDecimal("0.42");
result = minuend.subtract(subtrahend);
System.
out.println(q2 + result.doubleValue());

BigDecimal multiplicand =
new BigDecimal(4.015);
BigDecimal multiplicator =
new BigDecimal(100);
result = multiplicand.multiply(multiplicator);
System.
out.println(q3 + result.doubleValue()); //结果也不精确
  BigDecimal中  a.add(b); 必须a 还是a, 必须 c = a.add(b), 有 C 存在,a 也可以
减乘除其实最终都返回的是一个新的BigDecimal对象,因为BigInteger与BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以a.add(b);虽然做了加法操作,但是a并没有保存加操作后的值,正确的用法应该是a=a.add(b);
原文地址:https://www.cnblogs.com/qbmiller/p/6972033.html