[PHP] Forcer l'affichage des zéros inutiles

flokocha Messages postés 1519 Statut Membre -  
 dub -
Bonjour,

Je me trouve confronté à un problème en apparance tout bête mais auquel je ne trouve pas de solution.
Dans un script PHP je calcule un prix de manière automatique et l'arrondis à deux chiffres après la virgule. Or si le prix obtenu est par exemple de 15.50€, le script affichera 15.5€, ce qui ne me convient pas. Ainsi je souhaiterais connaître une manière "propre" et rapide pour forcer l'affichage des zéros inutiles après la virgule.

En faisant une recherche sur le net j'ai constaté que certaines personnes confrontées au même problème l'avaient résolu en utilisant la fonction number_format, mais je ne vois pas comment l'utiliser sachant que si le nombre de chiffres après la virgule est fixé à 2, le nombre de décimales lui peut varier.

Je vous remercie pour vos réponses éventuelles. :)
A voir également:

6 réponses

rdbois Messages postés 22 Statut Membre 7
 
Je suis tombé sur ce sujet car je cherché exactement la même chose que son titre, et en y réfléchissant j'ai trouvé tout seul.

Donc, pour tous ceux qui tomberont là-dessus, voici une solution :

$prix = round($prix,2); // On arrondi le prix à 2 chiffres après la virgule

echo sprintf('%.2f',$prix); // On affiche le prix avec 2 chiffres après la virgule quoi qu'il arrive

6
113
 
number_format() c le mieux pr les 0 "innutiles"
5
kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Avec sprintf, tu peux décider quel formatage utiliser et quel nombre de chiffres après la virgule tu veux. Pour les décimales apparemment si tu ne mets rien ya pas de soucis.
Par exemple:
echo sprintf('%.2f', 522.555); //Affichera 522.55

L'avantage aussi c'est que sprintf coupe les chiffres mais n'arrondit pas.
1
flokocha Messages postés 1519 Statut Membre 281
 
Merci pour cette réponse mais malheureusement je ne comprends pas du tout le principe de la fonction sprintf().

En effet prenons pour exemple le calcul suivant: 5.50/1.196, dont le résultat est 4,5986622...

Si j'utilise la fonction round($nombre,2), j'obtiens 4.6 (le résultat que j'attends étant 4.60).
Si j'utilise la fonction sprintf('%.2f',$nombre), j'obtiens 4.604 (je ne comprends pas pourquoi).
Si j'utilise la fonction sprintf('%.1f',$nombre), j'obtiens 4.63 (je ne comprends encore moins pourquoi).

Merci d'éclairer ma lanterne. :)
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Bizzare, moi avec sprintf('%.2f',$nombre), j'ai bien 4.60

Tu pourrais me dire ta version de Php?
0
flokocha Messages postés 1519 Statut Membre 281
 
Désolé pour le retard dans ma réponse. :)

Ma version de PHP est la 4.3.10
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Bon, je testerai bientôt avce cette version.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rduvrac
 
ça peux venir su fait que tes . se transforme en , ce qui à pour conséquence de fausser tout calculs

c'est juste une piste...

Je passai par là à la recherche d'une autre fonction proche mais à l'inverse ;-)

j'ai un calcul qui me donne pout 7.3 le résultat 7
sauf que moi je cherche à avoir le zéro avant lorsque le résultat est un chiffre unique
Bon si une piste poster ici mais n'oubliez pas que c'est pas le sujet principal du post ;-)
0
dub
 
moi pour avoir les décimales mais pasles "zéro inutile j'ai fait ça :

echo str_replace(",00","",number_format($price, 2, ',', ' '))."€";
0