Отрицательная сумма для заказов

Возможный дубликат:
PHP Math Precision

У нас работает магазин Magento, где мы в настоящее время применяем 100% скидку на ряд продуктов в корзине. Платеж выполняется методом «Zero subtotal checkout».

Мы перезаписали класс Mage / Sales / Model / Order.php, чтобы мы могли сделать кредитные авизо для этих заказов с общей суммой 0, отредактировав canCreditmemo() и _checkState() .

В остальном кнопка «Кредитное напоминание» теперь отображается при просмотре «0-го общего порядка». Однако, когда мы пытаемся отправить кредитное авизо ( saveAction() ), мы получаем следующее сообщение:

Сумма кредитового авизо должна быть положительной.

После отладки контроллера ( app / code / core / Mage / Adminhtml / контроллеры / Sales / Order / CreditmemoController.php ) более специфично _initCreditmemo() мы обнаружили, что при регистрации данных creditmemo Mage::log($creditmemo->getData()); что мы получаем следующие результаты: (фрагмент)

 [adjustment_positive] => 0 [base_adjustment_negative] => 0 [adjustment_negative] => 0 [subtotal] => 123.96 [base_subtotal] => 123.96 [subtotal_incl_tax] => 149.99 [base_subtotal_incl_tax] => 149.99 [grand_total] => -1.4210854715202E-14 [base_grand_total] => -1.4210854715202E-14 [tax_amount] => 26.03 [base_tax_amount] => 26.03 [discount_amount] => 149.99 [base_discount_amount] => 149.99 

Обратите внимание на странное значение grand_total и base_grand_total, вот что вызывает сообщение об ошибке, у кого есть идея?

EDIT : Еще одна отладка:

Мы сузили проблему, чтобы быть в / app / code / core / Mage / Sales / Model / Order / Creditmemo / Total , более конкретным в конце, где она делает следующее:

 $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $totalTax + $totalHiddenTax); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseTotalTax + $baseTotalHiddenTax); 

Регистрируя три переменные и результат операции, получаем следующие результаты:

 $creditmemo->getGrandTotal(): float(-26.03) $totalTax: float(26.03) $totalHiddenTax: float(0) $creditmemo->getGrandTotal() + $totalTax + $totalHiddenTax: float(-1.4210854715202E-14) 

Это ошибка PHP или что?

Версия: Magento Community Edition v1.7.0.1