MySql - round() - déconseillé
Par Seza le dimanche 25 février 2007, 02:20 - Programmation - Lien permanent
J'ai découvert récemment que la fonction round() dans MySql n'était pas fiable sur les ciffres exactement entre deux entiers.
Explication : pour faire un arrondi en mysql il vient tout bonnement à l'idée d'utiliser la fonction round(). Or comme j'ai pu en faire l'expérience d'un server à l'autre cette fonction peut amener à des résultats différents pour la même requête.
Dixit MySql : Notez que le comportement de l'opérateur ROUND(), lorsque l'argument est exactement entre deux entiers, dépend de la bibliothèque C active.
Alors que faire pour être certain d'avoir un arrondi correct ? Puisqu'en france la règle veut que lorsque qu'un chiffre est exactement entre deux entiers il soit arrondi à l'entier supérieur, j'ai fait ce petit calcul :
Pour arrondir X à Z décimal :
FLOOR(0.5 + POW(10, Z) * X) / POW(10, Z)
Voilà cette requête renverra toujours le même résultat peu importe le serveur. =)
Bonne nuit.
Commentaires
Ouf !
Rand() n'est pas déconseillé, c'est Round() ... si tu savais comme le titre de ton post m'a fait peur :).
Très intéressant ton blog, bonne continuation.
Méga faute !!
Les plus grosses sont toujours celles que l'on ne voit pas. Merci pour ton post encourageant =p rectification faîtes !
Et mes sincères excuses pour la frayeur occasionnée
Simple commentaire reprenant un peu celui de Taku : il y a encode deux "rand()" dans les deux premiers paragraphes. :)
je dois être dyslexique ... merci :)
Lorsque qu'un chiffre est exactement entre deux entiers, il DOIT être est arrondi à l'entier supérieur. Cà n'a rien d'une convention française, c'est mathématique. Vala...
Salut Aga,
je te conseille cet article sur wikipedia : http://fr.wikipedia.org/wiki/Arrondi qui parle des différentes manière d'arrondir. Déjà à ce stade tu pourras te rendre compte qu'il n'y a pas qu'une seule méthode pour arrondir un chiffre.
Je n'ai pas trouver un texte de loi française spécifiant la manière d'arrondir un chiffre néanmoins comme dans ce décret (en annexe I) http://www10.finances.gouv.fr/fonds_documentaire/euro2002/textes/recueil/04.htm on peut voir que la méthode d'arrondi à employer est spécifiée.
L'arrondi par excès se retrouve dans de nombreux documents officiel français et on peut donc en déduire que l'arrondi par excès est la méthode préférée à employer en france. Ce qui n'est pas forcément le cas dans d'autres pays comme me l'avais préciser à l'époque de cet article un DAF ayant travaillé quelques années aux états-unis.