Округление корзины покупок

Я пытаюсь найти лучший способ рассчитать цены и итоги корзины.
Все цены на товары представлены цифрами с двумя десятичными точками, однако, когда скидка добавляется в корзину, скажем, 50%, эта приведенная, например, цена в $ 37,27 заканчивается цифрой $ 18,635, имеющей 3 знака после запятой. Теперь я хотел бы, чтобы расчеты были точными, но округление 3 десятичных цифр не всегда дает ожидаемый результат.

сценарий

В моей корзине 5 товаров со следующими оригинальными ценами:

  • $ 80,00
  • $ 189,62
  • $ 37,27
  • $ 43,75
  • $ 105,34

Дать нам всего $455.98

Когда я добавлю глобальную скидку в 50% — взяв общее количество цифр выше, это даст мне $227.99, Теперь это будет работать нормально, если мне не нужно будет получать цифру для каждого товара после применения скидки — и это тот случай, когда я хочу передать товары в PayPal Express Checkout. Запрос не будет выполнен, если сумма не равна сумме всех товаров в корзине.

Вышеуказанные цифры после деления каждого на 2 (50%):

  • $ 40,00
  • $ 94,81
  • $ 18,635
  • $ 21,875
  • $ 52,67

Даем нам точно такую ​​же сумму, как когда мы делим сумму на 2.
Проблема в том, что я не хочу, чтобы в моей корзине было 3 десятичных знака, поэтому при их округлении получается:

  • $ 40,00
  • $ 94,81
  • $ 18,64
  • $ 21,88
  • $ 52,67

что составляет в целом $228, который при умножении на 2 дает нам значение, отличное от того, которое мы изначально имели в корзине без применения скидки.

Каков наилучший способ решения таких сценариев?

0

Решение

это такой великий вопрос. я бы хотел применить скидку 50% к каждому товару — округлить это число до 2 десятичных знаков в числовом формате — и сохранить это число как часть записи заказа в корзине, даже если вы не показываете его покупателю. затем сложите эти цифры, как обычно, чтобы получить общее количество товара в корзине.

причина: кому-то в какой-то момент понадобится четкая сумма, взимаемая за каждый продукт. И думать о возвращении. Это сделает возврат намного проще, если вам не нужно корректировать различия .01.

1

Другие решения

Ты можешь использовать bcmul(), это убедится, что ваши номера точны.

Если вы хотите убедиться, что цены всегда имеют два десятичных знака, вы можете использовать number_format(),

http://php.net/manual/en/function.bcmul.php

http://php.net/manual/en/function.number-format.php

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector