Возможный дубликат:
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