Round et Mysql :D
12 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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 passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
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 passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
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'
?
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 passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
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 passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
Et si... Tu le faisais en PHP ton round ?
-

Bourriquet - WRInaute passionné

- Messages: 635
- Inscription: Lun Sep 19, 2005 22:10
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 ?
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 ?
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Gestion des langues et des sessions en PHP / MySQL
- Passage à l'heure d'été/hiver sur un forum phpBB
- GoogleStats : analyse temps réel des visites de Google sur votre site
- Sortie officielle de GoogleStats v2.0 !
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Le WRInaute du moment
- Interview Wikio : transcript du chat WebRankInfo
- Googlebot, le robot d'indexation de Google
- Le marketing viral au service du référencement
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité



le forum