Maison >développement back-end >C++ >Comment puis-je comparer avec précision les valeurs décimales en C# lors de l'utilisation de nombres à virgule flottante ?

Comment puis-je comparer avec précision les valeurs décimales en C# lors de l'utilisation de nombres à virgule flottante ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 20:57:13337parcourir

How Can I Accurately Compare Decimal Values in C# When Using Floating-Point Numbers?

Comparaison de nombres à virgule flottante double précision en C# : problèmes de précision et d'exactitude

Lors de l'utilisation de variables à virgule flottante double précision en C#, les développeurs rencontrent souvent des résultats inattendus lors de comparaisons impliquant des valeurs décimales. L’un de ces problèmes découle d’une propriété fondamentale de la représentation en virgule flottante.

Problème de virgule flottante

Le type de données

en C# utilise des fractions binaires au lieu de fractions décimales pour stocker des valeurs à virgule flottante. Cette représentation a ses limites, et certaines valeurs décimales ne peuvent pas être stockées exactement. Par exemple, le nombre 0,1 ne peut pas être représenté exactement comme une fraction binaire. Il est stocké à titre d’approximation, ce qui donne des valeurs légèrement différentes. double

Solution : Type décimal

Pour pallier ce manque de précision, pensez à utiliser le type de données

au lieu de decimal. double Stockez les nombres en utilisant la notation décimale, permettant de représenter exactement des valeurs telles que 0,1. Cela élimine les problèmes rencontrés lors de la comparaison des valeurs decimal. double

Explication détaillée

Les nombres à virgule flottante sont représentés à l'aide d'un exposant et d'une mantisse, similaires à la notation scientifique. Cependant, au lieu d’utiliser la base 10, il utilise la base 2 (notation binaire).

Les valeurs décimales telles que 0,1 ont des représentations binaires non répétitives et sont donc difficiles à stocker avec précision dans les systèmes base 2. Par conséquent, l'approximation binaire de 0,1 stockée dans la variable

peut différer légèrement de la valeur réelle. double

Cette différence subtile peut conduire à des comparaisons incohérentes dans les instructions

, où la valeur attendue de 0,1 peut ne pas correspondre à la valeur stockée. L'utilisation du type de données if évite ces problèmes en garantissant un stockage et une comparaison précis des valeurs décimales. decimal

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn