Page 1 sur 2

Question sur round()

Posté : 09 avr. 2009, 10:23
par lacfab
Hello,

Alors voilà j'utilise la fonction round pour m'arrondir mes valeurs ... un calcul est fait à partir de la base de donnée tout se fait comme il faut sauf un truc ...

Si je fais par exemple round(300 + 100 + 200,2) il me sort 600 alors que je voudrais qu'il m'affiche 600.00
J'ai testé avec number_format mais il me foire tous les calculs suivants ...

Une idée ?
Merci d'avance

Posté : 09 avr. 2009, 10:29
par orgerix
Je n'ia pas trop compris. Tu utilise number_format(), puis tu utilise le résultat pour des calculs ensuite ?

Si c'est le cas, c'est parce que tu n'utlise pas bin la focntion. Il ne faut l'utiliser qu'avant d'envoyer le nombre vers une sortie (dans une page HTML, un fichier, etc...). Il me semble qu'il renvoie une chaine. Même si php permet faciement de transformerdes chaines en nombres, tu aura des résultats étrange. Donc, tant que tu as des calculs à faire, tu reste avec le nombre tel quel, puis quand tu veux l'afficher, tu utlise number_format()

Posté : 09 avr. 2009, 10:41
par lacfab
non non j'utilise round, j'avais juste testé number_format mais ça ne convient pas.

Posté : 09 avr. 2009, 10:48
par Truc
Il faut toujours montrer ce qu'on a essayé... non pas pour qu'on puisse se moquer mais pour voir le pourquoi du comment du "ça ne marche pas" ;)

Posté : 09 avr. 2009, 12:00
par lacfab
C'est bien ce que j'ai fais ;-)
round(300 + 100 + 200,2) il me sort 600 alors que je voudrais qu'il m'affiche 600.00
A noter que je dois juste modifier l'affichage le calcul me convient très bien. Evidemment je ne peux pas mettre ".00" derrière car si le calcul amène une décimale ça fout la merde ;)

Posté : 09 avr. 2009, 12:12
par Lirio
round(300 + 100 + 200,2) il me sort 600 alors que je voudrais qu'il m'affiche 600.00
Je crois pouvoir dire que c'est normale.
Php a appris à compter
300+100+200.2 = 600.2.

Si tu arrondi à zéro chiffres, tu obtiens bien 600
Si tu arrondi à uhn chiffre, tu obtiens 600.2
Et à trois chiffres, c'est 600.20
Encore que je ne suis pas sur du dernier cas, parceque c'est pas vraiment un arrondis.
Bref. Php ne peut donc pas sortir 600.00, simplement parce que cela n'est pas le résultat du calcul.

Posté : 09 avr. 2009, 14:02
par Truc
C'est bien ce que j'ai fais ;-)
round(300 + 100 + 200,2) il me sort 600 alors que je voudrais qu'il m'affiche 600.00
je ne vois pas l'utilisation de number_format() ;)

Posté : 09 avr. 2009, 14:11
par Ryle
Euh.... y a deux choses :

- pour php, le séparateur de décimal est le point, pas la virgule. La virgule permet de séparer les arguments de ta fonction.
round(300 + 100 + 200,2)
Ca signifie 300+100+200 avec une précision de 2. Le résultat sera toujours "600" quoi qu'il arrive et quelle que soit la précision.

- pour mettre en forme un montant avec des décimales et faire apparaitre les 0 "inutiles", il faut utiliser number_format() comme l'a indiqué truc

Posté : 09 avr. 2009, 14:20
par lacfab
@Lyrio : round(300 + 100 + 200,2)[/quote] le ,2 signifie deux chiffres après la virgule, ce n'est pas 200.2 mais bien 200


@Ryle : ok merci pour la précision ... mais le number_format() ne convient pas car si j'ai 4 chiffres (2000) il sort 2,000.00 ... et si je fais un calcul par la suite avec ce chiffre tout est faux.

Tant pis je me passerai de la décimale :'(

edit pour Truc
exemple : number_format(300 + 600 + 200,2)

Posté : 09 avr. 2009, 14:26
par Ryle
Euh... vi... c'est normal.... la fonction number_format(), comme sa description l'indique, a pour unique but de formater un nombre pour l'affichage, pas pour des calculs ultérieurs ;)

Posté : 09 avr. 2009, 14:40
par lacfab
Tu me diras je peux faire le round pour le calcul et le number_format pour l'affichage ... y a-til un moyen de supprimer la virgule qui sépare les milliers ???

Posté : 09 avr. 2009, 14:48
par Ryle
Et si on commençait par le début, et que tu regardais la documentation de la fonction
pour savoir à quoi elle sert, ce qu'elle peut faire et comment elle fonctionne ? ;p

Posté : 09 avr. 2009, 15:06
par dunbar
Surtout la Notation anglaise sans séparateur des centaines. :wink:

Posté : 09 avr. 2009, 17:00
par lacfab
Je veux bien lire le manuel mais c'est clair comme de l'eau de roche ...

http://www.manuelphp.com/php/function.number-format.php

Je dois comprendre quoi ? je dois faire number_format(2000,2,?,?)

Merci d'éclairer ma lanterne ^^

Posté : 09 avr. 2009, 17:09
par dunbar
Ici c'est plus claire
Dans ton cas
$numero = round(300 + 100 + 200);
$aff_numero = number_format($numero, 2, '.', '');
echo $aff_numero;