Bigdecimal解决浮点型商业运算中丢失精度的问题

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位小数除不尽的情况
    }
}

猜你喜欢

转载自blog.csdn.net/ouzhuangzhuang/article/details/87878432
今日推荐