关于精度问题(BigDecimalUtil工具类)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITw333/article/details/82831303

关于精度问题

这样写会丢失精度

 

 

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

对比可知,test2仍然会出现精度问题,而在创建BigDecimal对象时,参数为字符串就不会出现精度问题

BigDecimalUtil工具类   --解决精度问题

public class BigDecimalUtil {
    //防止工具类在外部实例化
    private 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位小数
    }
}

注意:使用该工具类时,除数不能为0

猜你喜欢

转载自blog.csdn.net/ITw333/article/details/82831303