Maison >développement back-end >C++ >Pourquoi « x == 0.1 » ne fonctionne-t-il pas avec « double x = 0.1 » en C# ?
Comparaison de nombres à virgule flottante en C# : dilemme décimal
En C#, vous pouvez rencontrer quelques problèmes lors de la comparaison de valeurs de type double
. Considérez le code suivant :
<code class="language-csharp">double x = 0.1; if (x == 0.1) { // ... }</code>
Étonnamment, ce code n'entre pas dans la déclaration if
. Pourquoi est-ce ?
Problème de nombre à virgule flottante
La racine du problème réside dans la façon dont les ordinateurs représentent les nombres à virgule flottante (en particulier double
). Contrairement aux nombres entiers, double
utilise des fractions binaires au lieu de fractions décimales. Cela signifie que certaines valeurs décimales, telles que 0,1, ne peuvent pas être stockées exactement.
Par exemple, en notation binaire, 0,1 est représenté par 0,000110011001100110011001.... L'ordinateur tronque cette boucle infinie de décimales en une représentation finie, qui peut ne pas correspondre exactement à la valeur attendue.
Solution
Afin de résoudre ce problème, vous pouvez envisager les méthodes suivantes :
decimal
: Le type decimal
stocke les nombres en utilisant la notation décimale, permettant une représentation précise. Math.Abs(x - 0.1)
) pour comparer des nombres à virgule flottante. Explication des raisons
Les fractions binaires diffèrent des fractions décimales par leur capacité à représenter certains nombres. Par exemple, le nombre 1/10 ne peut pas être représenté exactement en binaire, ce qui fait que son expansion binaire est d'environ 0,0001100... Le processus d'arrondi de l'ordinateur introduit des inexactitudes lors du stockage des nombres à virgule flottante.
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!