Maison >développement back-end >C++ >Pourquoi 10 * 0,69 n'est-il pas exactement 6,9 en C# ?

Pourquoi 10 * 0,69 n'est-il pas exactement 6,9 en C# ?

DDD
DDDoriginal
2025-01-10 08:48:41836parcourir

Why is 10 * 0.69 not exactly 6.9 in C#?

Problèmes de précision en virgule flottante dans la multiplication C#

Examinons l'extrait de code C# :

<code class="language-csharp">double i = 10 * 0.69;</code>

Bien que vous vous attendiez à ce que i soit égal à 6,9, la sortie réelle est souvent de 6,899999999999999995. Cet écart résulte des limitations inhérentes à l'arithmétique à virgule flottante dans le framework .NET.

Les nombres à virgule flottante, contrairement aux nombres décimaux, sont représentés au format binaire. Cette représentation binaire signifie que certaines valeurs décimales, y compris celles comportant des parties décimales répétitives à l'infini comme 0,69, ne peuvent pas être exprimées parfaitement. Au lieu de cela, ils sont approximatifs.

Le compilateur, conscient de cette limitation, optimise fréquemment le calcul en stockant directement une approximation proche de 6,9, plutôt que de calculer 10 * 0.69 au moment de l'exécution. Cette approximation explique la légère différence observée.

Pour obtenir une plus grande précision, en particulier dans les applications financières, pensez à utiliser le type de données decimal. decimal utilise une représentation en base 10, fournissant une représentation plus précise des nombres décimaux comme 0,69, minimisant ainsi les erreurs d'arrondi associées à l'arithmétique binaire à 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!

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