Странные расчеты с ценой продукта в порядке
Мы столкнулись со странной ошибкой расчета в нашей настройке Magento.
Magento 1.7.0.2 с PHP 5.4
На приведенном выше рисунке вы видите два продукта, по сути, одинаковых. Однако у верхнего продукта общая сумма строк составляет 24,99, а у второго продукта - 25,00
Я знаю, что Magento 1.8 решает множество ошибок округления, но решает ли это эту проблему? Мы действительно не можем установить Magento 1.8, это очень специализированный магазин, и 1.8 все еще находится в альфа.
У нас есть ощущение, что это как-то связано с PHP 5.4, в настоящее время мы исследуем это с помощью виртуальной машины, я надеялся, что у кого-то здесь есть лучшее представление о том, почему это происходит или как мы можем подойти к этой проблеме.
Если вам нужна дополнительная информация, я буду рад рассказать вам больше. Заранее спасибо.
2 answers
Используете ли вы System > Configuration > Tax > Calculation Settings > Tax Calculation Method Based On > Total
? Если да, это может объяснить разные суммы на идентичных товарах, поскольку Magento распределяет округление по товарам. Использование Итоговой суммы строк не должно приводить к различным суммам.
Я временно применил обходной путь для этого. Я считаю, что эта проблема исправлена в версии 1.8, но обновление - это не вариант, и я не могу легко найти точный код, который мне нужен, чтобы исправить это.
Поэтому вместо этого я просто заставил его отключить функцию _deltaRound
.
Я знаю, что это может вызвать другие проблемы, поэтому используйте по своему усмотрению риск.
Приложение/код/ядро/Маг/Налог/Модель/Продажи/Итого/Котировка/Промежуточный итог.php:596
protected function _deltaRound($price, $rate, $direction, $type='regular')
{
return $price; // Workaround for 9.99 bug
if ($price) {
$rate = (string) $rate;
$type = $type . $direction;
Приложение/код/ядро/Маг/Налог/Модель/Продажи/Итого/Котировка/Tax.php:724
protected function _deltaRound($price, $rate, $direction, $type='regular')
{
return $price; // 99 cents workaround
if ($price) {
$rate = (string) $rate;
$type = $type . $direction;