Странные расчеты с ценой продукта в порядке


Мы столкнулись со странной ошибкой расчета в нашей настройке Magento.

Magento 1.7.0.2 с PHP 5.4

calculations

На приведенном выше рисунке вы видите два продукта, по сути, одинаковых. Однако у верхнего продукта общая сумма строк составляет 24,99, а у второго продукта - 25,00

Я знаю, что Magento 1.8 решает множество ошибок округления, но решает ли это эту проблему? Мы действительно не можем установить Magento 1.8, это очень специализированный магазин, и 1.8 все еще находится в альфа.

У нас есть ощущение, что это как-то связано с PHP 5.4, в настоящее время мы исследуем это с помощью виртуальной машины, я надеялся, что у кого-то здесь есть лучшее представление о том, почему это происходит или как мы можем подойти к этой проблеме.

Если вам нужна дополнительная информация, я буду рад рассказать вам больше. Заранее спасибо.

Author: Rick Kuipers, 2013-07-23

2 answers

Используете ли вы System > Configuration > Tax > Calculation Settings > Tax Calculation Method Based On > Total? Если да, это может объяснить разные суммы на идентичных товарах, поскольку Magento распределяет округление по товарам. Использование Итоговой суммы строк не должно приводить к различным суммам.

 0
Author: Kristof at Fooman, 2013-09-06 15:42:31

Я временно применил обходной путь для этого. Я считаю, что эта проблема исправлена в версии 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;
 -1
Author: Rick Kuipers, 2013-09-07 09:23:51