Aller au contenu | Aller au menu | Aller à la recherche
Pour stocker des valeurs monétaires dans une base de données, on a généralement le réflexe d'utiliser un champ de type FLOAT. Ce n'est cependant pas une bonne idée, en tout cas avec MySQL.
En effet, la documentation indique que MySQL arrondit les valeurs lors du stockage ce qui veux dire que la valeur récupérée n'est pas forcément exactement celle stockée ce qui est très gênant dans le cas de valeurs monétaires.
MySQL performs rounding when storing values, so if you insert 999.00009 into a FLOAT(7,4) column, the approximate result is 999.0001.
Il est préférable d'utiliser un champ de type DECIMAL comme préconisé dans la documentation de MySQL :
The DECIMAL and NUMERIC data types are used to store exact numeric data values. In MySQL, NUMERIC is implemented as DECIMAL. These types are used to store values for which it is important to preserve exact precision, for example with monetary data.
vendredi 16 février 2007 à 14h23 -
Développement Web
Aucun rétrolien pour le moment.
Les rétroliens pour ce billet sont fermés.
![]()
L'autre solution, plus flexible, consiste à stocker ces valeurs comme des entiers et à utiliser des multiplicateurs en fonction du nombre de chiffres après la virgule (sachant que certains pays n'ont pas de centimes, d'autres vont jusqu'à 3 chiffres).
Exemple:
10025 x 0.01 = 100.25
Bertrand Mansion
le lundi 26 février 2007 à 09h08
Les commentaires pour ce billet sont fermés.
© 2003-2010 Jean-Marc Fontaine - Tous droits réservés
XHTML - CSS - DotClear - Technorati
Les billets de ce blog sont sous licence Creative Commons
Perrich le mardi 20 février 2007 à 21h03