java在浮点型运算过程中会丢失精度,当用户进行多种购物组合时候,很可能造成一个用户有20元钱不能购买20元的商品,因为精度丢失导致最后结果为19.99999,影响非常大
我们可以使用java提供的BigDecimal类,BigDecimal有多个重载的构造方法能表示精度的值,只有用参数为String类型的构造方法才能表示解决。
public class BigDecimalUtil {
public static BigDecimal add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2);
}
public static BigDecimal sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2);
}
public static BigDecimal mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2);
}
public static BigDecimal div(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留2位小数除不尽的情况
}
}