Round et Mysql :D
12 messages
• Page 1 sur 1
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
Round et Mysql :D
Salut tout le monde,
Voilà après "Rand et Mysql" je suis de retour avec notre ami Round ...
Tout simple comme problème :
Je voudrais arrondir les décimales d'un nombre de telle sorte à avoir :
1,4 = 1
1,5 = 2
1,67 = 2
2,42 = 2
2,5 = 3 .... etc
Cependant voilà le petit problème que je rencontre :
- SELECT ROUND(1.5) => 2
pas de problème jusque là
Mais si on fait ca :
- SELECT ROUND(2.5) => 2
Là ca coince, ROUND(2.5) devrait faire 3 °_o
Avec les chiffres impairs je n'ai aucun problème, mais avec les pairs, ROUND arrondit à l'unité inférieur pour une décimale égale à 0.5 !
Quelqu'un a une idée ? C'est un bug connu ?
Merci
Voilà après "Rand et Mysql" je suis de retour avec notre ami Round ...
Tout simple comme problème :
Je voudrais arrondir les décimales d'un nombre de telle sorte à avoir :
1,4 = 1
1,5 = 2
1,67 = 2
2,42 = 2
2,5 = 3 .... etc
Cependant voilà le petit problème que je rencontre :
- SELECT ROUND(1.5) => 2
pas de problème jusque là
Mais si on fait ca :
- SELECT ROUND(2.5) => 2
Là ca coince, ROUND(2.5) devrait faire 3 °_o
Avec les chiffres impairs je n'ai aucun problème, mais avec les pairs, ROUND arrondit à l'unité inférieur pour une décimale égale à 0.5 !
Quelqu'un a une idée ? C'est un bug connu ?
Merci
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
Etrange.
Moi je n'ai pas ce bug.
Tu es sur quelle version de mysql ?
Moi je n'ai pas ce bug.
Tu es sur quelle version de mysql ?
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
Pour simple vérification, tu as bien écrit :
'deux point cinq' et non pas 'deux virgule cinq'
?
'deux point cinq' et non pas 'deux virgule cinq'
?
- spidetra
- WRInaute passionné

- Messages: 1500
- Inscription: 7 Juil 2003
The behavior of ROUND() when the argument is halfway between two integers depends on the C library implementation.
Different implementations round to the nearest even number, always up, always down, or always toward zero.
c'est pas rassurant
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
A priori c'est pas un bug de mysql, mais une conséquence de l'implémentation de certaines routines C qui fonctionnent différemment suivant l'os :
Manuel MySQL a écrit:The behavior of ROUND() when the argument is halfway between two integers depends on the C library implementation. Different implementations round to the nearest even number, always up, always down, or always toward zero. If you need one kind of rounding, you should use a well-defined function such as TRUNCATE() or FLOOR() instead.
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
Et si... Tu le faisais en PHP ton round ?
- Bourriquet
- WRInaute impliqué

- Messages: 637
- Inscription: 19 Sep 2005
Dans ce cas j'ai une solution
Ca marche. Et comme 2.4 + 0.1 ça fait 2.5 et qu'il l'arrondit à l'entier inférieur, ça fait 2.
Si tu as 2 tout pile et que t'ajoute 0.1 puis que tu arrondis, tu retombes à 2.
Magique non ?
- Code: Tout sélectionner
SELECT ROUND(2.5 + 0.1)
Ca marche. Et comme 2.4 + 0.1 ça fait 2.5 et qu'il l'arrondit à l'entier inférieur, ça fait 2.
Si tu as 2 tout pile et que t'ajoute 0.1 puis que tu arrondis, tu retombes à 2.
Magique non ?
- spidetra
- WRInaute passionné

- Messages: 1500
- Inscription: 7 Juil 2003
je viens de faire un test en mysql 5.1
L'arrondit supérieur ou inférieur dépend aussi si tu as une valeur exacte ( 3.5 ) ou une valeur approchée ( 3.5E0 ou 35E-1).
Qu'est-ce que tu obtient si tu teste ces valeurs ?
- Code: Tout sélectionner
mysql> SELECT ROUND(3.5), ROUND(3.5E-0), ROUND(35E-1), ROUND(2.5), ROUND(25E-1);
+------------+---------------+--------------+------------+--------------+
| ROUND(3.5) | ROUND(3.5E-0) | ROUND(35E-1) | ROUND(2.5) | ROUND(25E-1) |
+------------+---------------+--------------+------------+--------------+
| 4 | 3 | 3 | 3 | 2 |
+------------+---------------+--------------+------------+--------------+
1 row in set (0.00 sec)
mysql> SELECT ROUND((5/2));
+--------------+
| ROUND((5/2)) |
+--------------+
| 3 |
+--------------+
1 row in set (0.00 sec)
L'arrondit supérieur ou inférieur dépend aussi si tu as une valeur exacte ( 3.5 ) ou une valeur approchée ( 3.5E0 ou 35E-1).
Qu'est-ce que tu obtient si tu teste ces valeurs ?
-

mowmow - WRInaute impliqué

- Messages: 975
- Inscription: 3 Nov 2004
J'obtiens ca :
ROUND(3.5) 4
ROUND(3.5E-0) 4
ROUND(35E-1) 4
ROUND(2.5) 2
ROUND(25E-1) 2
ROUND((5/2)) 2
Ca change pas grand chose à notre problème apparament
Bourriquet > D'accord pour 2.5, mais pour 3.5 le round fonctionne correctement donc là ca me fausse tout ^^
ROUND(3.5) 4
ROUND(3.5E-0) 4
ROUND(35E-1) 4
ROUND(2.5) 2
ROUND(25E-1) 2
ROUND((5/2)) 2
Ca change pas grand chose à notre problème apparament
Bourriquet > D'accord pour 2.5, mais pour 3.5 le round fonctionne correctement donc là ca me fausse tout ^^
12 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Le WRInaute du moment - 24-10-2006
- Les différents systèmes de mise en cache des données - 16-08-2010
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
