Page 1 sur 1

Arrondir à deux décimales un variable (AVG)

Posté : 07 avr. 2011, 14:43
par mikeld
Bonjour,
Je cherche a arrondir à deux décimales une requête Mysql sous PHP.
Voici mon code PHP:
Code:

Code : Tout sélectionner

<?php echo "<br/><b>function(AVG) Group by type</b><br/><br/>"; $con = my_conn(); $query = "SELECT type, AVG(price) FROM produits GROUP BY type"; $result = mysql_query($query) or die(mysql_error()); echo "<table border='1'>"; echo "<tr>"; echo "<th>Type</th>"; echo "<th>Average</th>"; echo "</tr>"; while($row = mysql_fetch_array($result)){ echo "<tr><td>"; echo "<b>".$row['type']."</b>"; echo "</td><td>"; echo "<b><center>".$row['AVG(price)']."</center></b>"; echo "</td></tr>"; } echo "</table>"; mysql_close($con); ?>
Le champ "price" est défini dans MySQL comme FLOAT(4,2).
Le code marche très bien mais me retourne une moyenne avec 6 décimales.
Comment paramétrer la variable $row['AVG(price)'] ???
Merci de votre aide.
PS j'ai essayé sans succés number_format() ainsi que round().

Re: Arrondir à deux décimales un variable (AVG)

Posté : 07 avr. 2011, 15:37
par Mazarini
Bonjour,

Que pose round() comme problème ?

Round(1234.12345678,2) me semble très bien de mémoire.

Re: Arrondir à deux décimales un variable (AVG)

Posté : 07 avr. 2011, 15:49
par mikeld
bonjour,
Effectivement Round() me parait très bien. Mais je sèche sur le fait de déclarer round() avec ma variable
$row['AVG(price)'] qui vient de la loop : while($row = mysql_fetch_array($result))
Une idée ?

Re: Arrondir à deux décimales un variable (AVG)

Posté : 07 avr. 2011, 16:03
par Mazarini
Bonjour,

echo "<b><center>".round($row['AVG(price)'],2)."</center></b>";
(ca doit marcher)

Autrement pour le SELECT type, AVG(price) FROM produits GROUP BY type, mettre SELECT type, AVG(price) as prix_moyen FROM produits GROUP BY type me semble plus "joli" avec $row['prix_moyen']

Edit :
1) avg_price, ou simplement price ou ce que tu veux peuvent très bien remplacer prix_moyen
2) Pour des prix, j'ai l'habitude de les stocker et manipuler en centimes pour éviter les problèmes d'arrondis et autres bizarrerie des nombres flottants. Je fait la conversion en euro à l'affichage et à la saisie.

De mémoire il arrive que :
$prix = 3.21 et 2 * $prix => 6
alors que $prix = 3.21 et 2.0 * $prix => 6.42

Edit 2 : De toutes facon, il faut faire un traitement sur les montants. Il me semble qu'une facture avec des prix 1234.21 peut être refusée.

Re: Arrondir à deux décimales un variable (AVG)

Posté : 07 avr. 2011, 16:16
par mikeld
Re bonjour,
Effectivement cela marche. J'avais une erreur de syntaxe au niveau du round().
Merci de ton aide A+

Re: Arrondir à deux décimales un variable (AVG)

Posté : 24 mai 2011, 19:42
par dunbar
Sinon pourquoi ne pas utiliser ROUND directement dans la requête ?
$query = "SELECT type, ROUND(AVG(price),2) FROM produits GROUP BY type";
A+

Re: Arrondir à deux décimales un variable (AVG)

Posté : 13 mars 2012, 18:43
par Kevin
Merci pour cette réponse. La méthode SQL trés pratique.
Cordialement

Re: Arrondir à deux décimales un variable (AVG)

Posté : 14 mars 2012, 11:51
par sirakawa
Ce n'est pas directement en rapport, mais la question m'a rappelé des stocks d'ennuis que j'avais eus avec une application de paie en DBASE, justement sur les décimales et les arrondis. Dbase ne connaissait pas le Décimal codé binaire.
Il me semble que le type Decimal de mysql est assez sympa...

Re: Arrondir à deux décimales un variable (AVG)

Posté : 15 mars 2012, 16:48
par sirakawa
Ce qui risque d'être refusé, c'est une facture où, du fait des arrondis, le TTC est différent du HT+TVA et où
la somme des sommes horizontales diffère de la somme des sommes de colonnes
pro_1 HT1 TVA1 TTC1
pro_2 HT2 TVA2 TTC2
somme HT1+ HT2 TVA1+TVA2 doit être égale à TTC1+TTC2