美文网首页
Java中Double和Float的加减操作后精度丢失的处理

Java中Double和Float的加减操作后精度丢失的处理

作者: 猫小萌的哥哥 | 来源:发表于2018-04-02 23:31 被阅读153次

1、情景再现

    double oweCost = 0.01;

    double parkCost = 0.01;

    double totalCost =  oweCost + parkCost;

    正常情况下:

totalCost = 0.02,但是可能就会出现totalCost = 0.01999999998等等之内的情况,而且还是偶发的,并不是每次都会丢失精度,这可是把我折磨苦了。

2、解决办法

    引入Java的BigDecimal类

①先使用 Double.toString() 将需要处理数据做处理;

②创建 BigDecimal 对象,将上面的处理做参数传入;

③然后将 BigDecimal 相加减,bigDecimal.add(),bigDecimal.subtract();

④使用bigDecimal.doubleValue(),将 BigDecimal 类转换成double。

⑤特别需要注意:如何需要累加,需要new 多个BigDecimal 对象,且有一个最开始需要赋值0,不能直接等于0,页不能等于null,而是这样赋值BigDecimal bigDecimal = BigDecimal.ZERO

下面是一个简单的使用示例:

BigDecimal bigDecimal1;

BigDecimal bigDecimal2;

BigDecimal bigDecimal = BigDecimal.ZERO;

totalCost =0;

for (int i =0; i < < upCostList.size(); i++)

bigDecimal1 =new BigDecimal(upCostList.get(i).getTotalAmount());

    bigDecimal2 =new BigDecimal(Double.toString(upCostList.get(i).getTotalAmountSubmit()));

    bigDecimal = bigDecimal.add(bigDecimal1.subtract(bigDecimal2));

}

totalCost = bigDecimal.doubleValue();

感悟:就是一个简单的工作记录,希望坚持下去。

相关文章

网友评论

      本文标题:Java中Double和Float的加减操作后精度丢失的处理

      本文链接:https://www.haomeiwen.com/subject/vjsfhftx.html