Arrondir à deux décimales un variable (AVG)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Arrondir à deux décimales un variable (AVG)

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

par sirakawa » 15 mars 2012, 16:48

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

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

par sirakawa » 14 mars 2012, 11:51

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)

par Kevin » 13 mars 2012, 18:43

Merci pour cette réponse. La méthode SQL trés pratique.
Cordialement

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

par dunbar » 24 mai 2011, 19:42

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)

par mikeld » 07 avr. 2011, 16:16

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)

par Mazarini » 07 avr. 2011, 16:03

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)

par mikeld » 07 avr. 2011, 15:49

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)

par Mazarini » 07 avr. 2011, 15:37

Bonjour,

Que pose round() comme problème ?

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

Arrondir à deux décimales un variable (AVG)

par mikeld » 07 avr. 2011, 14:43

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