61 votes

stocker des sommes d'argent dans mysql

Je veux stocker 3.50 dans une table mysql. J'ai un float dans lequel je le stocke, mais il stocke 3,5, pas 3,50. Comment puis-je l'obtenir pour avoir le zéro final?

94voto

dbemerlin Points 6257

Ne stockez pas les valeurs d'argent comme float, utilisez le type DECIMAL ou NUMERIC:

Documentation pour les types numériques MySQL

EDIT & clarification:

Les valeurs flottantes sont vulnérables aux erreurs d’arrondi, car leur précision est limitée. Par conséquent, à moins que vous ne vouliez obtenir que 9,99 au lieu de 10,00, vous devez utiliser DECIMAL / NUMERIC car il s’agit de nombres à virgule fixe ne posant pas de tels problèmes.

37voto

Andy Joiner Points 747

Ce n’est généralement pas une bonne idée de stocker de l’argent sous forme de fonds car des erreurs d’arrondi peuvent survenir dans les calculs.

Envisagez d'utiliser DECIMAL (10,2) à la place.

19voto

graham.reeds Points 9363

Est-ce vraiment important s'il stocke 3,5, 3,50 ou même 3 500?

Ce qui est vraiment important, c’est la façon dont il est affiché une fois récupéré de la base de données.

Ou est-ce que je manque quelque chose ici?

Aussi, n'utilisez pas de float, utilisez une décimale. Float a toutes sortes de problèmes d'arrondi et n'est pas très gros.

17voto

TiuTalk Points 3797

Pour stocker des valeurs, vous pouvez utiliser un champ DECIMAL (10,2) , puis vous pouvez utiliser la fonction FORMAT :

 SELECT FORMAT(`price`, 2) FROM `table` WHERE 1 = 1
 

5voto

MatsT Points 1036

Si vous utilisez des types DECIMAL ou NUMERIC, vous pouvez les déclarer comme par exemple DECIMAL (18, 2), ce qui forcerait 2 décimales même si elles étaient égales à 0. En fonction de la valeur que vous attendez, vous pouvez modifier la valeur du premier paramètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X