Question sur round()

Eléphant du PHP | 164 Messages

09 avr. 2009, 10:23

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

Mammouth du PHP | 693 Messages

09 avr. 2009, 10:29

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

Eléphant du PHP | 164 Messages

09 avr. 2009, 10:41

non non j'utilise round, j'avais juste testé number_format mais ça ne convient pas.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 avr. 2009, 10:48

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" ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 164 Messages

09 avr. 2009, 12:00

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 ;)

Eléphanteau du PHP | 34 Messages

09 avr. 2009, 12:12

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.
These lines the last endeavor,
To find the missing lifeline.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 avr. 2009, 14:02

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() ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 avr. 2009, 14:11

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 164 Messages

09 avr. 2009, 14:20

@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)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 avr. 2009, 14:26

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 164 Messages

09 avr. 2009, 14:40

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 ???

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

09 avr. 2009, 14:48

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2291 Messages

09 avr. 2009, 15:06

Surtout la Notation anglaise sans séparateur des centaines. :wink:

Eléphant du PHP | 164 Messages

09 avr. 2009, 17:00

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 ^^

ViPHP
ViPHP | 2291 Messages

09 avr. 2009, 17:09

Ici c'est plus claire
Dans ton cas
$numero = round(300 + 100 + 200);
$aff_numero = number_format($numero, 2, '.', '');
echo $aff_numero;