Maison >développement back-end >C++ >Pourquoi « i = 10 * 0,69 ; » en C# donne-t-il 6,89999999999999995 au lieu de 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 :
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
.Math.Round()
ou le formatage de chaîne avec NumberFormatInfo
vous permettent d'arrondir le résultat au niveau de précision souhaité.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!