959 votes

décimal vs double! - Qui dois-je utiliser et quand?

Je continue à voir des gens en utilisant un double en C#. Je sais j'ai lu quelque part que les doubles perdent parfois de précision. Ma question est de savoir quand doit-on utiliser un double et quand dois-je utiliser un type décimal? Le type est approprié pour de l'argent calculs? (ie. plus de 100 millions de dollars)

1138voto

David Points 12145

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

Si les chiffres doivent correspondre correctement ou de l'équilibre, de l'utilisation de décimales. Cela inclut toutes les financiers de stockage ou des calculs, des notes, ou d'autres numéros que les gens peuvent faire à la main.

Si la valeur exacte du nombre n'est pas important, l'utilisation du double de la vitesse. Cela inclut les graphiques, de la physique ou d'autres sciences physiques calculs où il existe déjà un "nombre de chiffres significatifs".

196voto

Michael Borgwardt Points 181658

Ma question est de savoir quand doit-on utiliser un double et quand dois-je utiliser une virgule type de?

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

double lorsque vous avez besoin d' une relative précision (c'est à dire perdre de la précision dans les chiffres de fin sur les grandes valeurs n'est pas un problème) à travers sauvagement différentes grandeurs - double couvre plus de 10^(+/-300). Les calculs scientifiques en sont le meilleur exemple ici.

le type est approprié pour de l'argent les calculs?

virgule, virgule, virgule

N'acceptez aucun compromis.

Le facteur le plus important est qu' double, à la mise en œuvre d'une fraction binaire, ne peut pas représenter avec précision nombre decimal fractions (comme 0.1) à tous , et son nombre de chiffres est plus petit car il est en 64 bits vs 128 bits pour decimal. Enfin, les applications financières ont souvent de suivre des modes d'arrondi (parfois prescrits par la loi). decimal prend en charge ces; double ne le sont pas.

44voto

Chris S Points 32376

Système.Unique / float - 7 chiffres
Système.Double / double - 15-16 chiffres
Système.Décimal / décimal - 28-29 chiffres significatifs

La manière dont j'ai été piqué par l'utilisation du mauvais type de une bonne il ya quelques années est avec de grandes quantités:

  • £520,532.52 - 7 chiffres
  • £1,323,523.12 - 8 chiffres

Vous exécutez à 1 million de dollars pour un float.

15 chiffres de la valeur monétaire:

  • £1,234,567,890,123.45

9 milliards avec un lit double. Mais avec de la division et des comparaisons, c'est plus compliqué (je ne suis certainement pas un expert en virgule flottante et les nombres irrationnels - voir Marc du point). Le mélange des décimales et des doubles provoque 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é parce que le nombre à virgule flottante peut pas exactement approximative de la virgule numéro.

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

À l'aide de double au lieu de decimal monétaire applications est un micro-optimisation - c'est le moyen le plus simple je la regarde.

39voto

Ian Boyd Points 50743

Virgule est pour des valeurs exactes. Double est pour des valeurs approximatives.

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

27voto

Clement Herreman Points 5642

Pour l'argent: decimal. Il coûte un peu plus de mémoire, mais qui n'ont pas d'arrondi des troubles comme la double a parfois.

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