请教一个折扣金额分摊算法的问题

情天 发布于 2017/01/10 10:09
阅读 1K+
收藏 1

比如说购物车里面5个产品,每个产品会有单价、数量和小计金额,整单有一个额度不定的折扣金额,需要分摊到每个产品的单价中,现在需要写一个算法来分摊这个折扣金额。

例如:购物车有A和B这2个产品,A产品单价5元,买了2个,小计10元,B产品单价6元,买了4个,小计24元,总计34元,
如果折扣是4元的话还好说,分别摊2元的折扣就ok了,
分摊后A产品单价4元,买2个,小计8元,B产品单价5.5元,买了4个,小计22元,总计30元。

如果折扣是7、11、13之类无法除尽的数字,就有可能会产生无限小数,这样把折扣分摊出去之后再累加回来,造成金额与分摊前的金额不一致的问题

有没有一个合理分摊的算法?既保证了分摊后金额不小于等于0,又保证了金额累加的一致性?

谢谢各位,提醒一个思路即可

加载中
0
O龙猫O
O龙猫O

均摊法都会遇到这种除不尽的问题的。不过,误差金额一般是控制到分(小数点后两位),先按你的算法分摊,分摊好后.例如总共分到了N个上。那么前N-1个还是照常分摊就可以了,这N-1个,要先进行舍位(一般是保留两位小数,四舍五入),第N个=总额-sum(N-1个)。这种挤差法,可以解决你的问题。微信的微粒贷,最末一期还款金额,差不多就是这样处理的。除不尽的情况下,保证不了所有一,一定相等的。

0
OSC_GALyfe
OSC_GALyfe
这个么我在p2p算投资收益遇过,方法很简单,最后判断一下,如果多了就抹点,少了加上
0
实力小黄毛
实力小黄毛

这个么我在p2p算投资收益遇过,方法很简单,最后判断一下,如果多了就抹点,少了加上

这个可行的

另外一种方法一样的,先取余%, 最后加上去

0
Tuesday
Tuesday
我只想说, 意义何在?  折扣一般计算在订单上就好了啊. 这么分散,  那退货算法不更复杂? 
0
钛合金番薯
钛合金番薯
分期取2位小数,最后一期轧平
返回顶部
顶部