double类型在运算时经常遇到精度丢失的问题,在核算金额或者计算精细数据时让我们头疼不已
怎么改呢,有人说用BigDecimal,对用BigDecimal的确可以但得用对,下面时今天遇到的bug,以及解决方法。
错误方案
public static Double doubleFormatAdd(Double... doubles){
BigDecimal count = new BigDecimal(0);
for (Double aDouble : doubles) {
BigDecimal bigDecimal = new BigDecimal(aDouble);
count = count.add(bigDecimal);
}
return count.doubleValue();
}
测试方法
//测试方法
public static void main(String[] args) {
Double aDouble = doubleFormatAdd(1.2, 0.5, 1.6, 7.1, 8.2);
System.out.println(aDouble);
}
结果
![](https://img-blog.csdnimg.cn/img_convert/978ee17e2793fcee41fb0d80f514e1c2.png)
解决方案
只需把double类型换成String即可
public static Double doubleFormatAdd(Double... doubles){
BigDecimal count = new BigDecimal("0");
for (Double aDouble : doubles) {
BigDecimal bigDecimal = new BigDecimal(aDouble.toString());
count = count.add(bigDecimal);
}
return count.doubleValue();
}
结果
![](https://img-blog.csdnimg.cn/img_convert/0f8a6b14135507c1df4f4b4d42e33248.png)