背景:将一批商品进行入库操作。
情况一 商品A,金额(6.50),数量(2)=> 此时的单价(3.25)是在分数位(小数点后2位)以内是可以除尽的。
情况二 商品B,金额(6.85),数量(3)=> 此时的单价(2.283333…),除不尽。
而实际支付中,我们只能支付到几元几角几分钱,分位后面的是无法进行支付的。所以产生了一种处理方法(不是四舍五入)。那就是如果某种商品的某批进货的金额÷数量得出的结果在小数点后2位数以内仍然除不尽的话,就必须将这批进货的入库操作进行拆分。
比如将情况二中的入库可以拆分成2批进货:
①商品B,金额(4.56),数量(2)=> 单价(2.28)
②商品B,金额(2.29),数量(1)=> 单价(2.29)
①的金额+②的金额=6.85,仍然等于拆分前的总金额,而数量也是相加也仍然等于拆分前的总数量。但此时实际支付的时候,用户却可以准确的,不用四舍五入的,支付出他所需要支付的金额数。因为此时的单价是个可以支付的数目。
问题就是,【从编程的角度,如果设计一种算法】,使得不管这批进货的商品的金额与数量之间的关系是如何,都能将这批货物合理地逻辑划分(如果它需要划分的话)为2批货物(实在不行可以划分为3批、4批),确保划分完的这些货物的单价是只精确到分位以内的。
同时此时各批的单价×各批的数量,然后相加的和,仍然等于拆分前的总金额;各批的数量相加之和,也仍然等于拆分前的总数量。
最后注意一点是,拆分完的各批单价不能相差太多,应该只是分位上有差异。
就是想询问下大家,如何设计这个算法。。。