优惠均摊计算规则
由于商品的售价不同,优惠金额在分摊到每件商品中时,需要按照商品售价占优惠组的比例进行优惠分摊,这样可以避免买家恶意退单退货,并且也为退款金额做出合理依据。
-
按商品售价分摊计算公式:商品售价 / 优惠商品组总价 * 优惠力度
-
案例1:如商品A售价70元,商品B售价30元,商品A和商品B同时参与优惠减10元,则需要将优惠金额按商品销售金额进行均摊,商品A优惠7元,商品B优惠3元
购物车 | 单价 | 数量 | 参与优惠 | 小计 | 优惠 | 优惠后金额 | 总计(元) | 计算公式 |
商品A | 70 | 1 | 满100-10元 | 70 | 7 | 63 | 90 | 70 / 100 * 10 = 63 |
商品B | 30 | 1 | 30 | 3 | 27 | 30 / 100 * 10 = 27 |
-
注意:只对有参与该优惠商品进行优惠分摊,若有商品C不属于此优惠,则无需分摊,详见如下案例
-
案例2:如商品A售价70元,商品B售价30元,商品C售价100元,商品A和商品B同时参与优惠减10元,商品C不参与优惠,则需要将优惠金额按均摊到商品A和商品B,无需均摊到商品C,商品A优惠7元,商品B优惠3元,商品C优惠0元
购物车 | 单价 | 数量 | 参与优惠 | 小计 | 优惠 | 优惠后金额 | 总计(元) | 优惠均摊计算公式 |
商品A | 70 | 1 | 满100-10元 | 70 | 7 | 63 | 190 | 70 / 100 * 10 = 63 |
商品B | 30 | 1 | 30 | 3 | 27 | 30 / 100 * 10 = 27 | ||
商品C | 100 | 1 | 无优惠 | 100 | 0 | 100 | 不分摊优惠金额 |
精度计算问题算法
使用以上优惠均摊方案进行计算,可能会造成当一个订单商品过多时,计算每个单个商品优惠价格,四舍五入后,他们之和可能小于或者大于总优惠金额。
-
如:购买多件商品优惠均摊后,优惠金额≠实际优惠金额,如10元折扣,实际上只扣减了9.9元
-
案例:商品A、B、C的售价均为10元,优惠券为减10元,按照优惠均摊和四舍五入规则,每个商品优惠3.33元,累加起来则是9.99元,不符合减10元预期
购物车 | 单价 | 数量 | 参与优惠 | 小计 | 优惠 | 优惠后金额 | 总计 | 总优惠金额 | 应优惠金额 | 优惠计算公式 |
商品A | 10 | 1 | 优惠券减10元 | 10 | 3.33 | 6.67 | 20.01 实际应为20元 | 9.99 | 10 | 10 / 30 * 10 = 3.33(四舍五入) |
商品B | 10 | 1 | 10 | 3.33 | 6.67 | 10 / 30 * 10 = 3.33(四舍五入) | ||||
商品C | 10 | 1 | 10 | 3.33 | 6.67 | 10 / 30 * 10 = 3.33(四舍五入) |
-
解决方案:最后一件商的优惠金额使用总优惠金额减去以优惠金额来计算,公式:总优惠金额 - 商品A...商品N的已分摊优惠金额
购物车 | 单价 | 数量 | 参与优惠 | 小计 | 优惠 | 优惠后金额 | 总计 | 总优惠金额 | 应优惠金额 | 优惠计算公式 |
商品A | 10 | 1 | 优惠券减10元 | 10 | 3.33 | 6.67 | 20.00 | 10 | 10 | 10 / 30 * 10 = 3.33(四舍五入) |
商品B | 10 | 1 | 10 | 3.33 | 6.67 | 10 / 30 * 10 = 3.33(四舍五入) | ||||
商品C | 10 | 1 | 10 | 3.34 | 6.66 | 10 - 3.33 - 3.33 = 3.34 |