按购物车中的商品拆分

时间:2011-03-29 15:14:05

标签: php algorithm math e-commerce

我遇到与电子商务购物车相关的问题。在某些情况下(通常涉及特别优惠或代金券),可能会减少整体购物车总数 - 例如10英镑优惠券总价格。要计算此购物车的税务部分,英国税务局的建议之一是将减少量除以购物车中的产品数量,并使用此值计算每种产品的新毛利(含税)价格,您可以从中计算新的净价(不含税)。例如:10英镑的折扣(在2个产品的情况下)每个的总折扣为5英镑。显然,这里的一个问题可能是如果其中一个项目非常便宜,例如2.99英镑,因此不能减少5英镑。

我需要一种计算减少量应该是什么的方法,因此它在产品总数之间均匀分配,但从不使单个项目的成本小于零。救命啊!

FWIW我将用PHP编程

修改

Oswald的例子会在PHP中给我这样的东西:

$prodA = 2.99;
$prodB = 20.00;
$total = ($prodA + $prodB);
$reduction = 5.00;

$newA = ($prodA - (($prodA/$total) * $reduction));
$newB = ($prodB - (($prodB/$total) * $reduction));

似乎加起来..

2 个答案:

答案 0 :(得分:2)

如果item是商品的总价,total是所有总价格的总和,而reduction是您要从帐单中减去的金额,那么新的该项目的总价格是

item - item/total * reduction

这显然不会在项目之间平均分配减少量。但是,在项目之间平均分配减少会导致问题(正如您已经注意到的那样)。

而是该方法根据物品的价格按比例分配减少量。例如,如果10美元的项目减少1美元,则20美元的项目将减少2美元,5美元的项目项目将减少0.5美元。

答案 1 :(得分:1)

算法很简单:

  1. 对于每种产品,计算一个相对因子(通常在数学中称为“重量”),即产品价格除以购物车价格。
  2. 通过重量乘以折扣来降低每件产品的价格。
  3. 例如,如果您有10英镑的折扣和3种产品:A(£2),B(£3)和C(£45),则权重为:

    • A:2 /(2 + 3 + 45)== 2/50 = 0.04
    • B:3 /(2 + 3 + 45)== 3/50 = 0.06
    • A:45 /(2 + 3 + 45)= 45/60 = 0.9

    因此新价格将是:

    • A:£1.60 ==£2 - £0.04 * 10
    • B:£2.40 ==£3 - £0.06 * 10
    • A:£36.00 ==£45 - £0.9 * 10