题主今天在用 BigDecimal 进行计算的时候,遇到一个问题,那就是不管怎么计算,最后得到的值都没有变化,这里题主就有些疑惑了,用的也是推荐的API,先看代码:
BigDecimal totalPay = new BigDecimal("0");
BigDecimal totalIncomeOfMaster = new BigDecimal("0");
BigDecimal totalIncomeOfLB = new BigDecimal("0");
BigDecimal totalRebate = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(rebateDetailVOS.getList())) {
for (RebateDetailVO rebateDetailVO : rebateDetailVOS.getList()) {
totalPay.add(rebateDetailVO.getFinalPayOfUser());
totalIncomeOfMaster.add(rebateDetailVO.getFinalIncomeOfMaster());
totalIncomeOfLB.add(rebateDetailVO.getFinalIncomeOfLB());
totalRebate.add(rebateDetailVO.getRebateAmt());
}
}
复制代码
初次观察,这份代码没有问题,但是运行之后的结果没有达到预期,于是题主进入add()方法内部观看了一下源码:
问题就出在这里,这里会返回一个new BigDecimal 对象,所以求和的值并不会被记录。
然后题主就对代码进行修改:
BigDecimal totalPay = new BigDecimal("0");
BigDecimal totalIncomeOfMaster = new BigDecimal("0");
BigDecimal totalIncomeOfLB = new BigDecimal("0");
BigDecimal totalRebate = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(rebateDetailVOS.getList())) {
for (RebateDetailVO rebateDetailVO : rebateDetailVOS.getList()) {
totalPay = totalPay.add(rebateDetailVO.getFinalPayOfUser());
totalIncomeOfMaster = totalIncomeOfMaster.add(rebateDetailVO.getFinalIncomeOfMaster());
totalIncomeOfLB = totalIncomeOfLB.add(rebateDetailVO.getFinalIncomeOfLB());
totalRebate = totalRebate.add(rebateDetailVO.getRebateAmt());
}
}
复制代码
结果达到预期




近期评论