c# - float - vb net type decimal vs double




décimal vs double!-Lequel dois-je utiliser et quand? (5)

Cette question a déjà une réponse ici:

Je continue à voir des personnes utilisant des doubles en C #. Je sais que j'ai lu quelque part que les doublons perdent parfois de la précision. Ma question est quand devrait utiliser un double et quand dois-je utiliser un type décimal? Quel type convient aux calculs d'argent? (c'est-à-dire plus de 100 millions de dollars)


Ma question est quand devrait utiliser un double et quand dois-je utiliser un type décimal?

decimal lorsque vous travaillez avec des valeurs de l'ordre de 10 ^ (+/- 28) et où vous avez des attentes sur le comportement basé sur les représentations de base 10 - essentiellement de l'argent.

double pour quand vous avez besoin de précision relative (c.-à-d. perte de précision dans les chiffres de fin sur de grandes valeurs n'est pas un problème) à travers des magnitudes très différentes - double couvre plus de 10 ^ (+/- 300). Les calculs scientifiques sont le meilleur exemple ici.

quel type convient aux calculs d'argent?

décimal, décimal , décimal

Accepter aucun substitut.

Le facteur le plus important est que le double , implémenté comme une fraction binaire, ne peut représenter exactement plusieurs fractions decimal (comme 0.1) et son nombre global de chiffres est plus petit puisqu'il est de 64 bits par rapport à 128 bits pour la decimal . Enfin, les applications financières doivent souvent suivre des modes d'arrondis spécifiques (parfois prescrits par la loi). decimal supporte ; double ne le fait pas.


Decimal est pour les valeurs exactes. Le double est pour les valeurs approximatives.

USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)

Pour l'argent: decimal . Il en coûte un peu plus de mémoire, mais n'a pas de problèmes d'arrondis comme le double parfois.


System.Single / float - 7 chiffres
System.Double / double - 15-16 chiffres
System.Decimal / decimal - 28-29 chiffres significatifs

La façon dont j'ai été piqué en utilisant le mauvais type (il y a quelques années) est en grande quantité:

  • £ 520.532.52 - 8 chiffres
  • 1 323 523,12 £ - 9 chiffres

Vous vous retrouvez à 1 million pour un flotteur.

Une valeur monétaire de 15 chiffres:

  • 1 234 567 890 123,45 £

9 billions avec un double. Mais avec la division et les comparaisons c'est plus compliqué (je ne suis certainement pas un expert en nombres flottants et irrationnels - voir le point de Marc ). Mélanger des nombres décimaux et des doubles cause des problèmes:

Une opération mathématique ou de comparaison qui utilise un nombre à virgule flottante peut ne pas donner le même résultat si un nombre décimal est utilisé car le nombre à virgule flottante peut ne pas correspondre exactement au nombre décimal.

Quand dois-je utiliser double au lieu de décimal? a des réponses similaires et plus en profondeur.

Utiliser le double au lieu de la decimal pour les applications monétaires est une micro-optimisation - c'est la façon la plus simple de l'envisager.


Pour l'argent, toujours décimal. C'est pourquoi il a été créé.

Si les nombres doivent correspondre correctement ou être équilibrés, utilisez le nombre décimal. Cela inclut tout stockage financier ou calculs, scores ou autres numéros que les gens pourraient faire à la main.

Si la valeur exacte des nombres n'est pas importante, utilisez le double pour la vitesse. Ceci inclut les calculs graphiques, physiques ou d'autres sciences physiques où il y a déjà un "nombre de chiffres significatifs".





currency