【发布时间】:2021-04-07 07:03:04
【问题描述】:
我有以下代码:
AtomicReference<BigDecimal> totalAmount = new AtomicReference<>(new BigDecimal(BigInteger.ZERO, new MathContext(3)));
List<BigDecimal> list = new ArrayList<BigDecimal>();
list.add(new BigDecimal(8024));
list.add(new BigDecimal(8024));
list.forEach(value -> {
totalAmount.set(totalAmount.get().add(value, new MathContext(3)));
});
基本上,当我运行上述代码时,总金额的总和应该是16048,但它是`1.60E+4。
请建议我在这里缺少什么以获得正确的数量?
【问题讨论】:
-
真的需要
AtomicReference才能获得效果吗? -
由于功能性 for 循环,我必须使用 AtomicReference
-
您认为
new MathContext(3)是什么意思,您为什么这么认为? --- if 表示结果的精度为 3,即只有 3 位精度。8024减少到 3 位精度为8020!!! -
@user1999453 关于循环的建议: 使用普通循环:
for (BigDecimal value : list) { totalAmount = totalAmount.add(value); }其中变量定义为BigDecimal totalAmount = BigDecimal.ZERO; -
我的意思是:
new BigDecimal(BigInteger.ZERO, new MathContext(3)).add(new BigDecimal(8024), new MathContext(3)).add(new BigDecimal(8024), new MathContext(3))将产生完全相同的结果。您的问题通过显示不必要的代码来混淆真正的问题。请将您的代码缩减到最低限度。
标签: java bigdecimal