Dans Magento 1.3, il y a quelques problèmes d'arrondi.

J'ai eu le problème suivant :
Mon site doit avoir des codes de promotion qui rendent la commande gratuite, frais de ports compris. (Non, je ne donnerai pas ces codes :))
Ensuite, dans le tunnel de commande, l'idée était de n'afficher que la méthode "free" si celle-ci était trouvée. (D'ailleurs, il ne faut pas oublier d'activer l'option adéquate en backend).
Malheureusement, avec les problèmes d'arrondi, sur certaines commandes, j'obtenais un total non pas à 0.00 mais 0.000...x.
Ce qui, bien évidemment, empêche l'affichage de la méthode "free".

Le problème se situe dans la classe : Mage_Payment_Model_Method_Free et plus précisément dans la méthode isAvailable.

   public function isAvailable($quote=null)
    {
        if (is_null($quote)) {
           return false;
        }

        if (Mage::app()->getStore()->roundPrice($quote->getGrandTotal()) == 0) {
            return true;
        }

        return false;
    }


La méthode roundPrice peut renvoyer une valeur erronée à cause de l'utilisation de la fonction round() avec une précision de 2.

Une solution est d'ajouter le code suivant :

        if (number_format($quote->getGrandTotal(), 2) == '0.00')
        {
          return true;
        }

Cela devrait permettre d'avoir la méthode "free" disponible.

Si vous avez également des problèmes d'arrondi dans le total sur le panier, je vous conseille de modifier la précision de la méthode roundPrice().