Leider ist der altbekannte Rundungsfehler auch in der aktuellen Magento Version 1.6 nicht vollständig behoben. Da Magento die Preise intern teilweise auf 2 Nachkommastellen rundet (weiß der Henker, warum…), entstehen unter bestimmten Voraussetzungen immernoch Abweichungen in der Preisberechnung. Im hier vorliegendem Fall waren es zum Beispiel konfigurierbare Produkte mit Preisen inklusive Mehrwertsteuer.
Das Problem ist zum Glück recht leicht zu beheben. Hierzu muss folgende Funktion der Datei /app/code/core/Mage/Core/Model/Store.php angepasst werden.
1 2 3 4 5 6 7 8 9 10 | /** * Round price * * @param mixed $price * @return double */ public function roundPrice($price) { return round($price, 2); } |
Ihr seht, dort wird der Preis auf 2 Nachkommastellen gerundet.
Dies ändern wir in 4 Nachkommastellen und speichern die Datei unter /app/code/local/Mage/Core/Model/Store.php (Niemals Änderungen direkt im Core vornehmen!). Schon sollte Magento richtig rechnen.
1 2 3 4 5 6 7 8 9 10 | /** * Round price * * @param mixed $price * @return double */ public function roundPrice($price) { return round($price, 4); } |
Keine Angst, ausgegeben werden die Preise natürlich trotzdem mit nur 2 Nachkommastellen.




Diese Anpassungen sind in einem (nicht sehr bekannten) Modul von Rouven Rieker bereits fertig umgesetzt:
https://github.com/therouv/Magento-BetterPriceRounding. Die Anpassung behebt einige Rundungsprobleme, aber leider noch nicht alle…
Hallo Andreas, danke für den Hinweis. Das Modul vom Rouven war in meinen Versuchen in der aktuellen Magento Version (1.6.1.0) beim Kunden leider nicht zum Laufen zu kriegen. Daher dieses kleine Tutorial.
aber wenn man das ändert, kriegt man ernsthafte probleme mit paypal!!
http://www.magentocommerce.com/boards/viewthread/266585/
habt ihr dafür ne lösung??
Eigentlich unerklärlich, wie so ein Bug immer noch nicht behoben ist. Immerhin sind die Preise nicht so ganz unwichtig für einen Shop …
Ich meine es war doch schon einmal behoben in der 1.5er oder nicht?
Zu Teilen wurde es in V1.5 behoben. So ganz leider anscheinend noch nicht, haben wir bald in 1.6 feststellen müssen. Daher war diese kleine Änderung leider noch nötig.