Correction d'un problème de format de devise en PHP
P粉322319601
P粉322319601 2023-08-08 22:10:55
0
1
546

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


P粉322319601
P粉322319601

répondre à tous (1)
P粉275883973

31.005 est en fait entre les deux nombres, vérifiez la précision en virgule flottante sur https://php.net/float.

> ini_set('precision', 23) = "14" > 31.005 = 31.00499999999999900524

(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.

$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY); $formatter->setAttribute( NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP ); echo $formatter->formatCurrency(31.005, 'USD'), "\n"; # Output: .01

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

$formatter = new NumberFormatter('en', 2); $formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);

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.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!