之前出现这个问题找了很多帖子,发现也有人同样遇到这个问题,
然后解决如下:
//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类型的