Maison >développement back-end >C++ >Pourquoi « x == 0.1 » ne fonctionne-t-il pas toujours avec le type de données « double » de C# ?

Pourquoi « x == 0.1 » ne fonctionne-t-il pas toujours avec le type de données « double » de C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 20:46:11635parcourir

Why Doesn't `x == 0.1` Always Work with C#'s `double` Data Type?

C# double Comparaisons : problèmes de précision

Travailler avec des nombres à virgule flottante (comme le type double de C#) présente souvent des défis inattendus lors de la comparaison de valeurs. Un exemple courant consiste à comparer une variable double à 0,1 :

<code class="language-csharp">double x = 0.1;
if (x == 0.1) { /* Code */ }</code>

Cette comparaison apparemment simple pourrait étonnamment échouer.

Comprendre le problème : représentation binaire ou décimale

La cause première réside dans la façon dont les nombres à virgule flottante sont stockés. double les valeurs sont stockées sous forme de fractions binaires et non de fractions décimales. Cela signifie que de nombreuses valeurs décimales, dont 0,1, ne peuvent pas être représentées avec précision sous forme de fraction binaire. L'ordinateur stocke plutôt une approximation, ce qui entraîne des différences subtiles qui affectent les comparaisons.

La solution : utiliser le decimal Type de données

Pour éviter ce problème de précision, utilisez le type de données decimal. decimal les valeurs sont stockées en utilisant la notation décimale, permettant une représentation exacte de nombres comme 0,1.

<code class="language-csharp">decimal x = 0.1m;
if (x == 0.1m) { /* Code */ }</code>

L'utilisation de decimal garantit un stockage et une comparaison précis de 0,1.

Représentation à virgule flottante : un examen plus approfondi

Pour illustrer le problème, considérons la représentation décimale. 12.34 est :

<code>1 * 10^1 + 2 * 10^0 + 3 * 10^-1 + 4 * 10^-2</code>

De même, 0,1 est :

<code>1 * 10^-1</code>

Cependant, en binaire, certains nombres (comme 1/10 ou 0,1 décimal) manquent de représentation précise. Ils sont approximés, ce qui conduit à des écarts qui entraînent des résultats inattendus dans les comparaisons. Cette approximation explique pourquoi x == 0.1 peut échouer lorsque x est un double.

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