欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Double类型 通过for循环 精度丢失

程序员文章站 2022-07-15 13:38:47
...

Double类型 通过for循环 精度丢失
之前出现这个问题找了很多帖子,发现也有人同样遇到这个问题,
然后解决如下:

//a1 和 a2 两个相加的double类型数据
public  double add(double a1, double b1) {
        BigDecimal a2 = new BigDecimal(Double.toString(a1));
        BigDecimal b2 = new BigDecimal(Double.toString(b1));
        return round(a2.add(b2).doubleValue(),2);
    }

但是我用了这个方法后,大部分没有出现这种情况,但是个别就是会有这个精度走失;
这 我就强制给它保留小数点后两位(四舍五入):

//v要进行保留两位小数点的数据,scale 一般传2
public double round(Double v, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b = null == v ? new BigDecimal("0.0") : new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

这样就完美解决了 精度走丢的情况。 这个方法也适用Float类型的

相关标签: Android