均分小数位处理

场景:

借款人向借贷公司借款元,按照等本等息(这种方式好说明些)的方式还12期,每期还本金元。

对于一笔借贷来说,投资人会存在多个,假设为个,他们投资的总额等于元。

现在借款人开始还款,要求以下3点:
(1)返还给投资人的本金需要按比例分配,当时投资多,则本次还款到此投资人的本金就大;
(2)供应商每一期还的本金刚好等于给投资人的本金;
(3)投资人的本金进过12期还款之后,剩余的待还款本金为0;

问题分析:
(1)如果按照等比例返回给投资人,一定会遇见不能整除的问题,例如借款人借款1200元,三人各投资400元,有,借款人第一期还100元给3位投资人,每个投资人是均分不了的;
先给出如下的表格:

期数用户 用户1 用户2 用户3 总和
期数1 33.33 33.33 33.33 99.99
期数2 33.33 33.33 33.33 99.99
... ... ... ... ...
期数12 33.33 33.33 33.33 99.99
总和 399.96 399.96 399.96 1199.88

通过这个表格,横(投资人回款总额)竖(借款人还款总额)都和总数有偏差。
如果是严格的按照比例回款给投资人,显然在这个情况下是不可能的,我们放松这个条件,修改为投资人的汇款金额大致按照比例,自然越趋近越好。
投资人有有先后的顺序,还是按照这个例子来走,用户1在第一期的时候,实际上是,如果保留8位小数,且最后一位直接进位,得到,则用户1第一期回款金额为33.33元,同理得到用户2第一期为,但是,此时将用户1的加上得元,故用户2第一期回款本金为33.33,同理用户3第一期为,加上,得到,即元。

期数用户 用户1 用户2 用户3 总和
期数1 100
期数2 100
... ... ... ... ...
期数12 100
总和 399.96 399.96 400.08 1200

现在借款人的本金每期100元都完全分给了投资人,满足条件2,但是条件3不满足。我们将每个用户的最后一期 = 总本金 - 减去以前期数的总和来求得:

期数用户 用户1 用户2 用户3 总和
期数1 100
期数2 100
... ... ... ... ...
期数12 100
总和 400 400 400 1200

至此,比较完美的解决了这个问题,但是还是需要证明以下2点:
(1) 横行,最后的总和一定等于100;
(2) 竖行,最后一期不会因为前面几期多回款本金导致减成了负数;

第一个比较好解答,由于每一个用户的每一期都是分位直接进位的,所以到最后一个肯定是超过100%,但是也不会超过多少,保留八位小数可以保证百万级别的拆分;

第二个问题,到第11期时,借款人剩余该还本金为,假设用户3每次都回款多1分钱,到第11期剩余的本金为,则用户3第11期回款本金为:

证明:
即可。
如果此时发生前面累积小数 + 本次小数 > 1的情况,本次也不会减成负数。

ps:还有另外一种解决方案,暂且不表。

你可能感兴趣的:(均分小数位处理)