Разделение на товары в корзине - PullRequest
0 голосов
/ 29 марта 2011

У меня есть проблема, связанная с корзиной покупок электронной коммерции. В определенных обстоятельствах (обычно со специальными предложениями или ваучерами) может быть сделано уменьшение общей суммы корзины - например, Ваучер на £ 10 от полной стоимости корзины. Чтобы рассчитать налоговую часть этой корзины, одно из предложений налоговой инспекции в Великобритании состоит в том, чтобы разделить сокращение на количество продуктов в вашей корзине и использовать его для расчета новой цены брутто (вкл. Налога) для каждого продукта, из которого вы можете рассчитать новую чистую (без налога) цену. Например: скидка в размере 10 фунтов стерлингов будет (в случае с 2 продуктами) 5 фунтов стерлингов от каждого Очевидно, что одна проблема здесь может быть, если один из предметов очень дешево, например, 2,99 фунтов стерлингов и, следовательно, не может взять 5 фунтов стерлингов.

Мне нужен метод расчета того, каким должно быть это сокращение, чтобы оно равномерно распределялось между общим количеством продуктов, но никогда не делало стоимость одного элемента меньше нуля. Помогите!

FWIW Я буду программировать это на PHP

EDIT

Пример Освальда даст мне что-то вроде этого в PHP:

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

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

Кажется, что складывается ..

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Если item - это цена брутто товара, total - это сумма всех цен брутто, а reduction - это сумма, которую вы хотите вычесть из счета, тогда новая цена брутто для товара

item - item/total * reduction

Это явно не делит сокращение равномерно между предметами.Но равномерное распределение сокращения по предметам приводит к проблемам (как вы сами заметили).

Скорее, метод делит сокращение пропорционально в зависимости от цены предметов.Например, если предмет на 10 $ уменьшается на 1 $, предмет на 20 $ будет уменьшен на 2 $, а предмет на 5 $ будет уменьшен на 0,5 $.

1 голос
/ 29 марта 2011

Алгоритм прост:

  1. Для каждого товара вычислите относительный коэффициент (обычно называемый «вес» в математике), то есть цена товара, деленная на цену корзины.
  2. Уменьшите цену каждого продукта на его вес, умноженный на скидку.

Например, если у вас есть скидка в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...