- Digitalvertraut UG (haftungsbeschränkt) - http://www.digitalvertraut.de -

1 Cent Problem – Magento Rundungsfehler

Posted By markus On 4. Januar 2012 @ 16:26 In | Comments Disabled

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

Article printed from Digitalvertraut UG (haftungsbeschränkt): http://www.digitalvertraut.de

URL to article: http://www.digitalvertraut.de/fuer_entwickler/magento/1-cent-problem-magento-rundungsfehler/

© 2010 DigitalVertraut UG