Maison >développement back-end >C++ >Pourquoi « i = 10 * 0,69 ; » en C# donne-t-il 6,89999999999999995 au lieu de 6,9 ​​?

Pourquoi « i = 10 * 0,69 ; » en C# donne-t-il 6,89999999999999995 au lieu de 6,9 ​​?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 08:57:41147parcourir

Why Does `i = 10 * 0.69;` in C# Result in 6.8999999999999995 Instead of 6.9?

Problèmes d'arithmétique et de précision à virgule flottante .NET

En C#, l'instruction i = 10 * 0.69; donne étonnamment 6.8999999999999995 au lieu du 6.9 attendu. Cela découle des limitations inhérentes à la représentation des nombres à virgule flottante et à l'arithmétique dans le framework .NET.

L'idée fausse est que les valeurs décimales comme 0,69 peuvent être parfaitement représentées en binaire. Cependant, les nombres à virgule flottante (comme double et float) utilisent un système binaire, et de nombreuses fractions décimales ne peuvent pas être représentées avec précision en binaire, tout comme 1/3 ne peut pas être représenté exactement avec un nombre fini de chiffres décimaux. Le compilateur calcule et stocke le résultat sous forme de constante lors de la compilation, mais cette valeur stockée est une approximation du vrai résultat mathématique.

Plusieurs solutions existent pour répondre à ce problème de précision :

  • Utilisez le type de données decimal : decimal offre une plus grande précision et peut représenter avec précision 6.9. Cependant, l'utilisation de decimal peut entraîner une légère baisse des performances par rapport à double ou float.
  • Implémenter l'arrondi : Des fonctions comme Math.Round() ou le formatage de chaîne avec NumberFormatInfo vous permettent d'arrondir le résultat au niveau de précision souhaité.
  • Ajustement de la valeur : Vous pouvez ajuster légèrement les valeurs d'entrée pour compenser les erreurs d'arrondi potentielles. Cette approche ajoute cependant de la complexité et pourrait introduire de nouvelles inexactitudes.

Comprendre les limites de l'arithmétique à virgule flottante est essentiel pour écrire un code numérique robuste et précis. En utilisant les techniques appropriées, les développeurs peuvent minimiser l'impact de ces limitations de précision et garantir des opérations mathématiques fiables.

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