当我们对浮点数进行运算时,不要使用基本数据类型:float和double。因为很容易会产生精度丢失的问题:
System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);
以上运算都会丢失精度
对于浮点运算,要使用BigDecimal类。
推荐使用的构造方法:
public BigDecimal(String val)
成员方法:
public BigDecimal add(BigDecimal augend):加
public BigDecimal subtract(BigDecimal subtrahend):减
public BigDecimal multiply(BigDecimal multiplicand):乘
public BigDecimal divide(BigDecimal divisor):除
(推荐)public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode):除法。可以指定精度,以及舍入方式;
参数:
divisor - 此 BigDecimal 要除以的值。
scale - 要返回的 BigDecimal 商的标度。
roundingMode - 要应用的舍入模式。
BigDecimal big1 = new BigDecimal("0.00009");
BigDecimal big2 = new BigDecimal("0.01");
//加
BigDecimal bigResult = big1.add(big2);
System.out.println("加法:" + bigResult);
//减
bigResult = big1.subtract(big2);
System.out.println("减法:" + bigResult);
//乘法:
bigResult = big1.multiply(big2);
System.out.println("乘法:" + bigResult);
//除法:
bigResult = big1.divide(big2);
System.out.println("除法:" + bigResult);
//除法:要求:取小数点后两位,并且四舍五入
bigResult = big1.divide(big2,2,RoundingMode.HALF_UP);
System.out.println("保留2位小数,并四舍五入:" + bigResult);
|
|