我有一个由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)显然已注销(审计准则)!
因为您是四舍五入每个帐户,如果您想要的总数等于帐户的总和,您将不得不使用帐户的四舍五入值计算总数。
如果您在一个表中使用四舍五入而不在另一个表中使用它,那么无论使用哪种四舍五入方法,您都会遇到这个问题。
这里我们使用完整的数字进行计算,并在报告中截断它。