1 Cent Problem – Magento Rundungsfehler

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);
}   

3 Kommentare »

  1. hey…

    really good post……

    Trackback by Unknown — 6. Februar 2012 @ 17:18

  2. Nice posting.
    Will check this out.
    THX

    Comment by Andre Schubert — 6. Dezember 2012 @ 14:54

  3. Danke für den Post. Ich habe hier noch ein paar weitere Lösungen veröffentlicht: http://www.kokra.de/blog/loesung-fuer-den-magento-rundungsfehler-mit-paypal.html
    Vielleicht ist das ja für den ein oder anderen noch hilfreich.

    Comment by Nils — 28. März 2013 @ 20:08

RSS-Feed für Kommentare zu diesem Beitrag. | TrackBack URI

Hinterlasse einen Kommentar

XHTML ( You can use these tags): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> .

CAPTCHA-Bild
* Bitte tragen sie den Code in das Feld ein.
Diese Seite Drucken