numfmt_format_currency(new NumberFormatter('en',2), 31.005, "USD")
Ce code génère 31,00 $ Mais il devrait générer 31,01 $. Comment résoudre ce problème ??? Ce code imprime 31,00 $. Mais 31,01 $ devraient être générés. Comment résoudre ce problème? ?
PHP ignore la conversion de 0,005 en 0,01 au format prix.
J'ai essayé de résoudre le problème de formatage de la devise de Magento mais j'ai trouvé un problème avec PHP
31.005 est en fait entre les deux nombres, vérifiez la précision en virgule flottante sur https://php.net/float.
(En PHP et dans d'autres langages, il n'y a pas de numéro 31.005..)
Vous devez fournir des chiffres avec une précision suffisante, mais avec le moins d'erreurs possible, pour répondre à vos exigences d'affichage. Ceci peut être réalisé en spécifiant le mode d'arrondi, par exemple, si vous souhaitez arrondir 31,005 à 31,01, vous pouvez choisir d'arrondir vers le haut ou vers le bas.
C'est le sujet de l'avis de Droopsnoot
Mode par défaut et création du formatage des nombres
Comme Olivier l'a rappelé dans les commentaires, le mode par défaut est l'arrondi semi-pair, également appelé arrondi du banquier.
De plus, ils ont souligné qu'il serait "plus formel" d'utiliser la constante de classe NumberFormatter::CURRENCY au lieu d'utiliser le nombre magique 2
Cela permettra à votre code de mieux communiquer, sinon le chiffre 2 pourrait être interprété comme un nombre de chiffres ou une précision, mais ce n'est pas le cas dans ce cas. Vous pouvez trouver toutes les constantes de style dans le manuel PHP.
Remarque : Il ne s'agit pas uniquement d'un problème spécifique à PHP, vous rencontrerez le même problème lorsque vous transmettrez ces nombres à Javascript et devrez les formater en Javascript.