29 votes

Quelle est la meilleure façon de stocker une valeur monétaire dans la base de données ?

J'ai besoin de stocker quelques champs relatifs à l'argent dans la base de données, mais je ne suis pas sûr du type de données à utiliser. argent y décimal .

44voto

Rad Points 6308

La décimale et l'argent devraient être assez fiables. Ce que je peux vous assurer (d'après ma douloureuse expérience personnelle d'applications héritées), c'est que NE PAS utiliser le flotteur !

14voto

Frederik Gheysels Points 36354

J'utilise toujours Decimal ; je n'ai jamais utilisé MONEY auparavant.

Récemment, j'ai trouvé un article concernant le type de données décimal par rapport au type de données monétaire dans Sql Server qui pourrait vous intéresser :

Argent et décimales

Il semble également que le type de données "argent" ne donne pas toujours des résultats exacts lorsque vous effectuez des calculs avec ce type de données : cliquer

Par le passé, j'ai utilisé un champ INT et stocké le montant en cents (centimes d'euro / centimes de dollar).

11voto

Marc Gravell Points 482669

Je suppose que tout dépend de la précision et de l'échelle. IIRC, money est de 4dp. Si c'est le cas, c'est parfait, money exprime votre intention. Si vous voulez plus de contrôle, utilisez decimal avec une précision et une échelle spécifiques.

4voto

AlSki Points 4364

Cela dépend de votre demande !!! Je travaille dans les services financiers où nous considérons normalement que le prix est significatif jusqu'à 5 décimales après le point, ce qui, bien sûr, lorsque vous achetez quelques millions à 3,12345 pence/cents, est un montant significatif. Certaines applications fournissent leur propre type SQL pour gérer cela.

D'un autre côté, cela n'est peut-être pas nécessaire. <Humour Les tarifs des entrepreneurs semblaient toujours être arrondis à la centaine de livres sterling la plus proche, mais ils semblent actuellement être arrondis aux 25 livres sterling les plus proches, dans le contexte actuel de resserrement du crédit. </humour>

2voto

Amber Points 177

N'alignez pas vos pensées sur les types de données disponibles. Analysez plutôt vos besoins et voyez quel type de données convient le mieux. Float est toujours le plus mauvais choix compte tenu de la limitation de l'architecture dans le stockage de la version binaire des nombres à virgule flottante. L'argent est une unité standard et sera certainement mieux pris en charge pour les opérations liées à l'argent. Dans le cas du type décimal, vous devrez gérer tout et n'importe quoi, mais vous savez que vous êtes le seul à manipuler un type décimal, ce qui vous évitera les surprises que vous pourriez avoir avec les deux autres types de données.

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