参考文档
代码应用时注意:
计算最后一个满减时,我们四舍五入,肯定会大于或小于最终满减金额。因此最后一个商品满减金额的算法为:总满减金额 - 前面所有商品满减的金额 = 最后一个商品满减金额
例1
一个商品,买了4件,单件价格50元;用了优惠卷满199-100;要退2个,求各商品实际支付价格和退款价格;
1、计算商品总价,是否满足使用优惠卷
50*4=200; //满足
2、计算使用优惠卷后的实际应付金额
200-100=100;
3、优惠卷满减的金额,应该按照商品价格分摊到各个商品
(1)、得到每实际支付1元分摊的优惠金额
公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额
100 / 200 = 0.5;
(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额
公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额
0.5 * 50 = 25;
公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额
25 * 4 = 100;
公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额
50 - 25 = 25;
计算完成,进行验证,验证都成功即计算成功。
1、优惠满减金额与公式3求出的满减金额是否正确 // true
2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true
3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额
x = 25 * 4 = 100元;
y = 200 - 100 = 100元;
x === y; // true
答:
1、各商品实际支付价格25元:见公式4;
2、退款价格50元:各商品实际支付金额 * 退款数量 = 退款价格
25 * 2 = 50;
例2
多个商品,商品a买了5件,价格为10元一件。商品b买了1个,价格为25一件。商品c买了3个,价格为15元件;用了优惠卷买99-40;需要退款:商品a退3个,b跟c全退
1、计算商品总价,是否满足使用优惠卷
(10*5)+(25*1)+(15*3)=120; //满足
2、计算使用优惠卷后的实际应付金额
120-40=80;
3、优惠卷满减的金额,应该按照商品价格分摊到各个商品
(1)、得到每实际支付1元分摊的优惠金额
公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额
40 / 120 = 0.3333333333333333;
(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额
公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额
商品a:0.3333333333333333 * 10 = 3.333333333333333;
商品b:0.3333333333333333 * 25 = 8.333333333333332;
商品c:0.3333333333333333 * 15 = 5;
公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额
商品a:3.333333333333333 * 5 = 16.666666666666664;
商品b:8.333333333333332 * 1 = 8.333333333333332;
商品c:5 * 3 = 15;
多商品需要相加:16.666666666666664 + 8.333333333333332 + 15 = 40元
公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额
商品a:10 - 3.333333333333333 = 6.666666666666667元;
商品b:25 - 8.333333333333332 = 16.666666666666668元;
商品c:15 - 5 = 10元;
计算完成,进行验证,验证都成功即计算成功。
1、优惠满减金额与公式3求出的满减金额是否正确 // true
2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true
3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额
x = (6.666666666666667*5) + (16.666666666666668*1) + (10*3) = 80元;
y = 120 - 40 = 80元;
x === y; // true
答:
退款价格66.66666666666667元:各商品实际支付金额 * 退款数量 = 退款价格
(6.666666666666667*3) + (16.666666666666668*1) + (10*3) = 66.66666666666667元
例3
多个商品,商品a买了2件,价格为99.99元一件。商品b买了1个,价格为69.3一件。商品c买了1个,价格为169元件;用了优惠卷买300-50;需要退款:各退一个
1、计算商品总价,是否满足使用优惠卷
(99.99*2)+(69.3*1)+(169*1)=438.28; //满足
2、计算使用优惠卷后的实际应付金额
438.28-50=388.28;
3、优惠卷满减的金额,应该按照商品价格分摊到各个商品
(1)、得到每实际支付1元分摊的优惠金额
公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额
50 / 438.28 = 0.11408232180341335;
(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额
公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额
商品a:0.11408232180341335 * 99.99 = 11.407091357123301;
商品b:0.11408232180341335 * 69.3 = 7.9059049009765445;
商品c:0.11408232180341335 * 169 = 19.279912384776857;
公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额
商品a:11.407091357123301 * 2 = 22.814182714246602;
商品b:7.9059049009765445 * 1 = 7.9059049009765445;
商品c:19.279912384776857 * 1 = 19.279912384776857;
多商品需要相加:22.814182714246602 + 7.9059049009765445 + 19.279912384776857 = 50元
公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额
商品a:99.99 - 11.407091357123301 = 88.58290864287669元;
商品b:69.3 - 7.9059049009765445 = 61.39409509902345元;
商品c:169 - 19.279912384776857 = 149.72008761522315元;
计算完成,进行验证,验证都成功即计算成功。
1、优惠满减金额与公式3求出的满减金额是否正确 // true
2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true
3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额
x = (88.58290864287669*2) + (61.39409509902345*1) + (149.72008761522315*1) = 388.28元;
y = 438.28 - 52 = 388.28元;
x === y; // true
答:
退款价格66.66666666666667元:各商品实际支付金额 * 退款数量 = 退款价格
(88.58290864287669*1) + (61.39409509902345*1) + (149.72008761522315*1) = 299.6970913571233元
例4(简单版)
一个商品,商品a5个,价格55;用了优惠卷买99-40;
1、计算商品总价,是否满足使用优惠卷
(55*5)=275; //满足
2、计算使用优惠卷后的实际应付金额
275-40=235;
3、优惠卷满减的金额,应该按照商品价格分摊到各个商品
(1)、得到每实际支付1元分摊的优惠金额
公式1:满减金额 / 订单参与满减的总金额 = 每实际支付1元分摊的优惠金额
40 / 275 = 0.14545454545454545;
(2)、使用每1元分摊的优惠金额,计算出各个订单所分摊的优惠卷金额
公式2:每实际支付1元分摊的优惠金额 * 单个订单的成交价 = 单个订单分摊的优惠卷金额
商品a:0.14545454545454545 * 55 = 8;
公式3:单个订单分摊的优惠卷金额 * 购买数量 = 优惠卷满减金额
商品a:8 * 5 = 40;
公式4:商品价格 - 公式2求出的单个订单分摊的优惠卷金额 = 各商品实际支付金额
商品a:55 - 8 = 47元;
计算完成,进行验证,验证都成功即计算成功。
1、优惠满减金额与公式3求出的满减金额是否正确 // true
2、公式3求出的满减金额 + 序号2里的实际应付金额是否等于商品总价 // true
3、各商品实际支付金额 * 购买数量 是否等于 商品总价 - 使用优惠卷后的金额
47 * 5 === 275 - 40; // true