我有以下代码:
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。请告知我在这里错过了什么,以获得正确的金额?
BigDecimal
及其add()
方法将生成所需的结果。这里不需要使用lambda表达式。下面的代码演示了同样的情况。这也是干净的代码。
public static void main(String[] args) {
List<BigDecimal> list = new ArrayList<BigDecimal>();
list.add(new BigDecimal(8024));
list.add(new BigDecimal(8024));
BigDecimal total = BigDecimal.ZERO;
for(BigDecimal element : list)
total = total.add(element);
System.out.print("Sum : " + total);
}
查看此代码在ideOne.com.运行
总数:16048
您似乎遗漏了两件事:
new MathContext(3)
会将值四舍五入为三位数。首先你加上8024,和,8024,四舍五入到8020。超过前三位数的所有内容都设置为0,向上或向下取整。然后你再加上8024,总和16044四舍五入到16000。BigDecimal
时,您(隐式或显式地)调用它的toString
方法。这种方法经常产生你得到的科学符号。确切的规则,当它在留档,请参阅底部的链接。如果您想确保控制您的BigDecimal
的格式,请使用DecimalFormat
。 get()
,然后执行set()
时,您正在误用原子引用
。在多线程环境中(这是原子引用
有任何意义的地方),不同的线程可能会在这两个调用之间执行set()
或其他操作,但是当您执行set()<时,结果会丢失/code>。取而代之的是,您应该使用原子引用
的累加和获取
(或getAnd累加
)方法。
我也不明白你为什么用这么复杂的方式做事。这种简单的方法可以满足您的要求:
List<BigDecimal> list = List.of(new BigDecimal("8024"), new BigDecimal("8024"));
BigDecimal totalAmount = BigDecimal.ZERO;
for (BigDecimal value : list) {
totalAmount = totalAmount.add(value);
}
System.out.println(totalAmount);
输出为:
16048
它类似于另一个答案中的代码。
编辑:作为一个好习惯,我将字符串文本传递给
new BigDecimal()
。虽然传递诸如8024这样的整数字面值本身没有问题,但传递双字面值(例如8024.1)通常意味着不准确。传递字符串将始终为您提供一个与字符串完全相同的值的BigDecimsl
。
文档链接
BigDecimal。toString()
我正在创建一个系统,使用GUI形式的链表存储数据。我在存储和显示链表时遇到了一些问题。看来我输入数据后,它并没有存储到链表中 我所做的是一个图书馆系统,所以我需要的是将书名、作者名、ISBN号和图书的拷贝数存储到链表中的单个节点中。这些信息来自用户输入,例如JTextField1。我的讲师教过我如何插入单个数据,但现在我需要插入多个数据。 我在Node类中重新创建了构造函数和getter方法,并在
我希望有人能帮我解决以下问题。我正在创建一个Java桌面应用程序,其中有一个包含两个JPanel的JPanel topicPanel;TopicButton面板包含JButton createEntryButton和topicTabCardsPanel,后者实现CardLayout。单击createEntryButton时,我试图动态创建并添加一个新的JPanel entryPanel,其中包含J
我尝试在云函数中使用Firestore,但遇到了错误 数据库。集合(…)。文档(…)。集合(…)。文档(…)。add不是promise的功能 我先读了这些主题,然后又读了其他主题。但我没有帮我。包裹。json外观 云功能之一 此代码来自函数 我怎样才能修复它?
有人能告诉我代码有什么问题吗?它只显示第一行和表头information.thks
我正在尝试使用一个名为'jQuery.InstagramFeed'的库,它允许我在不使用访问令牌的情况下显示用户feed中的图像。所以,我一直在尝试使用它,但是,出于某种原因,它并没有向我展示任何东西。 我已经研究了几个星期了,我已经尝试了在这里的很多帖子(以及其他论坛)中提出的很多解决方案,比如下面这些: TypeError:$不是函数调用jQuery函数 “未捕获的TypeError:$不是函