Arrondi de money_format

53 views
Skip to first unread message

Cyril Lopez

unread,
Sep 16, 2011, 6:51:49 AM9/16/11
to webd...@googlegroups.com
Bonjour à tous

J'ai une petite interrogation sur la fonction money_format de php.
Cette interrogation concerne l'arrondi sur un nombre tel que 12.665.
money_format me renvoie 12.66 alors que je m'attends à un arrondi : 12.67
D'autant plus que 12.666 est bien arrondi à 12.67 avec cette même fonction.

<?php
  setlocale('LC_MONETARY', 'fr_FR');
  $price = 12.665;
  echo money_format('%i',$price);
 
  echo number_format($price,2).'€'
?>

J'ai un souci de configuration ? Y a un truc que je ne vois pas ?
Merci pour vos avis.

Cyril, Nethik

Adrien Gardou

unread,
Sep 16, 2011, 8:33:28 AM9/16/11
to webd...@googlegroups.com
Bonjour,

Effectivement  c'est un problème de configuration de locale. "money_format" est très dépendant du SE, il ne fonctionne pas sur Windows.
Autre particularité, sur Debian, les locales sont du style "fr_FR.UTF-8". Vous pourrez trouver une liste complète ici : /usr/share/i18n/SUPPORTED.

Je pense que ça doit être le cas dans votre exemple car aucun symbole monétaire c'est affiché alors que c'est l'avantage de "money_format".
Par défaut si aucune locale n'est spécifiée, pas d'arrondi juste une troncature et aucun symbole non plus.


Adrien Gardou.


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Professionnels francophones du développement web.
Pour envoyer un message à ce groupe, adressez un e-mail à webd...@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse webdevfr+u...@googlegroups.com.
Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/webdevfr?hl=fr

Cyril Lopez

unread,
Sep 16, 2011, 8:40:07 AM9/16/11
to webd...@googlegroups.com
Le 16 septembre 2011 14:33, Adrien Gardou <adrien...@gmail.com> a écrit :
Je pense que ça doit être le cas dans votre exemple car aucun symbole monétaire c'est affiché alors que c'est l'avantage de "money_format".

Merci de ta réponse.
Dans mon exemple :
- la fonction setlocale() est censée positioner la locale sur fr_FR
- le sigle EUR est bien affiché chez moi (Debian) lors de l'exécution de ce petit bout de code
- money_format arrondi 12.666 avec la même configuration, et ne tronque pas.

Si il y a une erreur de config je ne la vois pas :(

Cyril, Nethik

Adrien Gardou

unread,
Sep 16, 2011, 9:00:54 AM9/16/11
to webd...@googlegroups.com
Essaies peut-être en spécifiant un encodage après la locale comme par exemple : "fr_FR.UTF-8" (vérifies dans le fichier dont je t'ai envoyé le chemin)

--

Cyril Lopez

unread,
Sep 16, 2011, 9:29:19 AM9/16/11
to webd...@googlegroups.com
Le 16 septembre 2011 15:00, Adrien Gardou <adrien...@gmail.com> a écrit :
Essaies peut-être en spécifiant un encodage après la locale comme par exemple : "fr_FR.UTF-8" (vérifies dans le fichier dont je t'ai envoyé le chemin)

Tu veux dire que le comportement que je décris est anormal et fonctionne comme prévu chez vous ?
Car j'ai essayé sans succès avec et sans encodage, et ce, sur deux serveurs différents.

Merci encore pour votre aide.

Cyril, Nethik

 

Mohammed Le Doze

unread,
Sep 16, 2011, 9:33:20 AM9/16/11
to webd...@googlegroups.com
Quelle version de PHP tu utilises ?

MLD



2011/9/16 Cyril Lopez <loveis...@gmail.com>

Cyril Lopez

unread,
Sep 16, 2011, 9:35:43 AM9/16/11
to webd...@googlegroups.com
Le 16 septembre 2011 15:33, Mohammed Le Doze <mohamme...@gmail.com> a écrit :
Quelle version de PHP tu utilises ?

5.3.8

Cyril, Nethik



Cyril Lopez

unread,
Sep 22, 2011, 7:00:17 AM9/22/11
to webd...@googlegroups.com
Le 16 septembre 2011 12:51, Cyril Lopez <loveis...@gmail.com> a écrit :
>
> Bonjour à tous
>
> J'ai une petite interrogation sur la fonction money_format de php.
> Cette interrogation concerne l'arrondi sur un nombre tel que 12.665.
> money_format me renvoie 12.66 alors que je m'attends à un arrondi : 12.67
> D'autant plus que 12.666 est bien arrondi à 12.67 avec cette même fonction.

Je reviens vers vous, le mystère est élucidé (via la liste php.general).
La fonction round utilise l'arrondi vers l'infini par défaut (PHP_ROUND_HALF_UP)
Tandis que money_format utilise l'arrondi dit "bancaire" (arrondi au
nombre pair le plus proche, constante PHP_ROUND_HALF_EVEN pour la
fonction round)
money_format arrondira à l'identique les deux nombres suivants :
1.245 => 1.24 (parce que 25 est impair)
1.235 => 1.24 (parce que 24 est pair)

Dans le cadre de l'e-commerce, je me demande donc quel arrondi est
préférable. Quelqu'un a un avis la-dessus ?

Merci, bonne journée.

Cyril, Nethik

Reply all
Reply to author
Forward
0 new messages