商城订单使用优惠卷价格计算逻辑,举例计算

参考文档

代码应用时注意:

计算最后一个满减时,我们四舍五入,肯定会大于或小于最终满减金额。因此最后一个商品满减金额的算法为:总满减金额 - 前面所有商品满减的金额 = 最后一个商品满减金额

例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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值