Теперь, предположив, что валюта — злотый (но я думаю, это не имеет значения), а ставка налога — 23%, моя корзина правильно рассчитывает промежуточные и итоговые суммы для следующих продуктов.
Код: Выделить всё
Product A: costs 129.00 * 69.4160 = 8954.6640 (11014.2367 with tax)
Product B: costs 150.00 * 1 = 150.0000 (184.5000 with tax)
Это мой метод:
Код: Выделить всё
if (!function_exists('price_float_to_money_format')) {
function price_float_to_money_format($price): string
{
// return $price;
$formatter = new NumberFormatter('pl_PL', NumberFormatter::CURRENCY);
$formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_UP); // up seems wrong
// $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_DOWN); // or down which seems OK?
$internationalCurrencySymbol = $formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);
return $formatter->formatCurrency($price, $internationalCurrencySymbol);
}
}
Если моя промежуточная сумма равна 9104,6640, это дает мне 9 104,67 злотых, за налог 2094,0727 я получаю 2 094,08 злотых, но для общей суммы 11198,7367 я получаю 11 198,74 злотых
Однако, когда я использую NumberFormatter::ROUND_DOWN const, я получаю 11 198,73 злотых (он также округляет промежуточный итог с 9 104,67 злотых до 9 104,66 злотых zł).
Пожалуйста, помогите мне понять, как мне округлять, поскольку в данном конкретном случае я считаю, что округление в меньшую сторону является правильным, потому что, когда я вручную суммирую на калькуляторе, он показывает 73 "цента", а не 74.

Где я допустил ошибку?>
Мобильная версия