Я пытаюсь найти лучший способ рассчитать цены и итоги корзины.
Все цены на товары представлены цифрами с двумя десятичными точками, однако, когда скидка добавляется в корзину, скажем, 50%, эта приведенная, например, цена в $ 37,27 заканчивается цифрой $ 18,635, имеющей 3 знака после запятой. Теперь я хотел бы, чтобы расчеты были точными, но округление 3 десятичных цифр не всегда дает ожидаемый результат.
сценарий
В моей корзине 5 товаров со следующими оригинальными ценами:
Дать нам всего $455.98
Когда я добавлю глобальную скидку в 50% — взяв общее количество цифр выше, это даст мне $227.99
, Теперь это будет работать нормально, если мне не нужно будет получать цифру для каждого товара после применения скидки — и это тот случай, когда я хочу передать товары в PayPal Express Checkout. Запрос не будет выполнен, если сумма не равна сумме всех товаров в корзине.
Вышеуказанные цифры после деления каждого на 2 (50%):
Даем нам точно такую же сумму, как когда мы делим сумму на 2.
Проблема в том, что я не хочу, чтобы в моей корзине было 3 десятичных знака, поэтому при их округлении получается:
что составляет в целом $228
, который при умножении на 2 дает нам значение, отличное от того, которое мы изначально имели в корзине без применения скидки.
Каков наилучший способ решения таких сценариев?
это такой великий вопрос. я бы хотел применить скидку 50% к каждому товару — округлить это число до 2 десятичных знаков в числовом формате — и сохранить это число как часть записи заказа в корзине, даже если вы не показываете его покупателю. затем сложите эти цифры, как обычно, чтобы получить общее количество товара в корзине.
причина: кому-то в какой-то момент понадобится четкая сумма, взимаемая за каждый продукт. И думать о возвращении. Это сделает возврат намного проще, если вам не нужно корректировать различия .01.
Ты можешь использовать bcmul()
, это убедится, что ваши номера точны.
Если вы хотите убедиться, что цены всегда имеют два десятичных знака, вы можете использовать number_format()
,