Der bekannte Magento Rundungsfehler ist auch in der neuesten Version 1.6 noch vorhanden.
Schnelle Abhilfe schafft aber auch hier ein Core-Rewrite der Funktion roundPrice() in der Datei app/code/local/Mage/Core/Model/Store.php
public function roundPrice($price) { return round($price, 4); }
Zu beachten ist auch, die Zend round Funktion ( lib/Zend/Locale/Math.php ).
Wenn die PHP Extension BCMATH aktiv ist oder bcmath nicht disabled ist macht Zend einen weiteren Fehler. Es wird keinerlei Rundung vorgenommen. Ein float Wert wird nach der zweiten Dezimalstelle abgeschnitten. Das wiederum hat ggf. auch das 1 Cent Problem zur Folge.
Abhilfe schafft hier eine Core-Rewrite der Funktion formatTxt($price, $options=array()) in der Datei app/code/core/Mage/Directory/Model/Currency.php
public function formatTxt($price, $options=array()) { if (!is_numeric($price)) { $price = Mage::app()->getLocale()->getNumber($price); } /** * Fix problem with 12 000 000, 1 200 000 */ $price = sprintf("%f", $price); /** * Disable BCMATH */ Zend_Locale_Math_PhpMath::disable(); return Mage::app()->getLocale()->currency($this->getCode())->toCurrency($price, $options); }