Java中BigDecimal和计算的舍入问题



我有一个由BigDecimal数字组成的数据集。我想把这个写在报告里。我已经设法生成了一个报告与以下格式。这有点类似于会计中的试算表。但事实并非如此!表中数据的值有4个小数点。但在报告中,它应该四舍五入到小数点后两位。报告也必须准确,因此使用BigDecimal

+--------+---------+--------+
|Account | Debits  | Credits|
+--------+---------+--------+
|A       | 0.2760  | 0.1630 |
+--------+---------+--------+
|B       | 0.2770  | 0.2640 |
+--------+---------+--------+
|Total   | 0.5530  | 0.4270 |
+--------+---------+--------+

真正的问题是在显示总数的时候。四舍五入后,总数不能正确相加。

+--------+---------+--------+
|Account | Debits  | Credits|
+--------+---------+--------+
|A       | 0.28    | 0.16   |
+--------+---------+--------+
|B       | 0.28    | 0.26   |
+--------+---------+--------+
|Total   | 0.55    | 0.43   |
+--------+---------+--------+

我使用HALF_EVEN舍入模式,因为它用于记账,也因为这个案例也涉及财务。

我可以在四舍五入后把它加起来。那么报告的计算就没问题了。但它不会表示数据库中的实际值。553接近0.55,但如果我把它四舍五入后加起来,结果将是0.56,0.553不接近0.56)。

有办法克服这个问题吗?我环顾四周,看看试算平衡表是如何制作的,但我找不到任何合适的解决方案。

编辑1

我在这样的金融系统中见过试算平衡表,他们在四舍五入后进行计算吗?我一直在比较这个和试算平衡报告,因为这个报告很相似。

编辑2
是否可以对舍入值进行计算?我了解到,不建议对舍入值进行计算,因为原始值会被丢弃。

编辑3 基于@MarcioB, @user3679868和@JoopEggen决定根据四舍五入的值进行计算。差值为0.047美元。56 - 0.553)显然已注销(审计准则)!

因为您是四舍五入每个帐户,如果您想要的总数等于帐户的总和,您将不得不使用帐户的四舍五入值计算总数。

如果您在一个表中使用四舍五入而不在另一个表中使用它,那么无论使用哪种四舍五入方法,您都会遇到这个问题。

这里我们使用完整的数字进行计算,并在报告中截断它。

最新更新