java money奇数除法和舍入法,不损失/获得美分

8ehkhllq  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(280)

我有一个关于货币计算及其精确性的舍入问题。
我使用java moneta libaray进行所有计算。
我在数据库中使用 NUMERIC(19,4) 问题
鉴于我有购物车的总金额 EUR 323.99 . 我想为这辆车提供3个月的分期付款,没有利率。
什么时候做 323.99 / 3 你会得到钱的 EUR 108.00 (默认四舍五入半个偶数)和 107.9966...667 每月付款存储为 107.9967 数据库中所有3个等额付款的数值。
在发票上我会显示 EUR 108.00 每月为客户付款。
当我收到客户付款时 EUR 108.00 ,我正在尝试将此交易金额分配到未付款项,即内部数值为的货币 107.9967 . 在我的查询端,我想计算并显示此订单的剩余本金余额,但使用这些数字,我无法生成准确的小数部分,因为我不允许在此进行任何手动舍入,否则我将失去精度。
例如,如果我对3笔付款进行以下计算:

1) 323.99 - 107.9967 = 215.9933
2) 215.9933 - 107.9967 = 107.9966
3) 107.9966 - 107.9967 = -0.0001

我只剩下价值不菲的钱了 EUR 0.00 具有内部bigdecimal值 -0.0001 同样的情况也会发生在用另一种方法计算的时候。最终结果是肯定的 0.0033 例如,表示为 EUR 0.00 但当它积累起来的时候,第二次就会是 0.0066 已经四舍五入到 EUR 0.01 ,好像顾客会得到1美分。
问题
是否有任何建议,这些计算应该如何执行或截断或不适当的四舍五入?
我应该如何处理这种价值观?实际上,当值为0.00时,我不应该关心任何超过2个小数点的值,但从长远来看,客户事务日志总和将开始从这些计算中累积美分。以某种方式去掉0.00之后的所有值,并将其完全保留为真实的0,可以吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题