La comparaison d'égalité pour les types décimaux C# est-elle plus susceptible de fonctionner comme nous le prévoyons intuitivement que les autres types de virgule flottante?Égalité de type décimal C#
Répondre
Je suppose que cela dépend de votre intuition. Je supposerais que certaines personnes penseraient au résultat de diviser 1 par 3 comme la fraction 1/3, et d'autres penseraient plus sur les lignes de "Oh, 1 divisé par 3 ne peut pas être représenté comme un nombre décimal, nous Je vais devoir décider combien de chiffres garder, allons avec 0,333 ".
Si vous pensez de la première façon, Decimal
ne vous aidera pas beaucoup, mais si vous pensez de la manière suivante, et que vous avez explicitement besoin d'arrondir lorsque c'est nécessaire, il est plus probable que les opérations soient "intuitivement" arrondir les erreurs en décimales, par exemple en divisant par 10, se comportera comme prévu. Ceci est plus intuitif pour la plupart des gens que le comportement d'un type binaire à virgule flottante, où les puissances de 2 se comportent bien, mais pas les puissances de 10.
Fondamentalement, non. Le type Decimal
représente simplement un type spécialisé de nombre à virgule flottante conçu pour réduire l'erreur d'arrondi spécifiquement dans le système de base 10. Autrement dit, la représentation interne d'un Decimal
est en fait en base 10 (denary) et non le binaire habituel. Par conséquent, c'est un type plutôt approprié pour les calculs monétaires - bien que cela ne soit pas limité à de telles applications.
De l'MSDN page pour la structure:
Le type de valeur décimale représente un nombre décimal allant de 79.228.162.514.264.337.593.543.950.335 positive à 79.228.162.514.264.337.593.543.950.335 négative. Le type Valeur décimale est approprié pour les calculs financiers nécessitant un grand nombre de chiffres entiers et fractionnaires significatifs et aucune erreur d'arrondi. Le type décimal n'élimine pas le besoin d'arrondir. Au contraire, il minimise les erreurs dues à l'arrondissement. Par exemple, le code suivant produit un résultat de 0,9999999999999999999999999999 au lieu de 1.
Un nombre décimal est une valeur à virgule flottante composée d'un signe, d'une valeur numérique où chaque chiffre de la valeur est compris entre 0 et 9, et un facteur d'échelle qui indique la position d'un point décimal flottant qui sépare les parties intégrale et fractionnaire de la valeur numérique.
Ahem. Down-vote pourquoi? Cette réponse est parfaitement correcte merci. – Noldorin
- 1. égalité polymorphique en C++
- 2. Custom Arrondi de type décimal en C#
- 3. objet C++ égalité
- 4. Scala égalité avec vérification de type?
- 5. pointeur Fonction égalité dans C
- 6. Même valeur, type inconnu égalité en réflexion
- 7. Type égalité dans l'API Scala 2.10 Reflection
- 8. Type décimal en php
- 9. type sql float, réel, décimal?
- 10. C#, VB6 et le type de données Décimal
- 11. Ruby égalité de tableau
- 12. Égalité d'itérateur
- 13. Arrondi décimal en C#
- 14. Zend_Db avec le type décimal
- 15. Type C# .NET pour décimal à plusieurs points?
- 16. C# - Plus grande précision décimale que le type décimal
- 17. Égalité C++ dans std :: tr1 :: unordered_map
- 18. Problème d'affichage de type décimal MySql
- 19. MySQL: Taille du type de données décimal
- 20. Formatage de sortie décimal C++
- 21. Arrondi Int de C décimal #
- 22. C# sérialisent décimal xml
- 23. Haskell: Contrainte égalité en exemple
- 24. Math.Round pour décimal C#
- 25. Séparateur décimal C#?
- 26. C# tableau binaire en décimal?
- 27. ArrayList égalité JUnit testing
- 28. Conversion de long en décimal en C#
- 29. SequenceMatcher de Difflib - Égalité personnalisée
- 30. ActiveRecord égalité objet
-1 Comme ce n'est pas vraiment répondre à la question, sauf pour ressasser ma réponse précédente. – Noldorin
@Noldorin - Je ne suis pas d'accord sur le fait qu'il s'agit d'une reprise, car votre réponse ne couvre pas le problème que l'arithmétique binaire n'est pas intuitive pour la plupart. En outre, je ne suis pas d'accord avec votre réponse «non» à la question de l'égalité étant plus susceptible de fonctionner comme prévu. Ne pas dire utiliser l'égalité est une bonne idée, mais regardez par exemple. le nombre d'utilisateurs Javascript confus sur divers sites web qui ont des problèmes dû au type de nombre étant binaire –
Cela n'a rien à voir avec être intuitif ... C'est simplement la représentation interne et la façon d'arrondir est faite, que je discute et cite de MSDN . Meh. – Noldorin