Maison > développement back-end > C++ > Pourquoi la conversion d'une expression flottante en un entier en C# produit-elle des résultats différents selon la méthode ?

Pourquoi la conversion d'une expression flottante en un entier en C# produit-elle des résultats différents selon la méthode ?

Mary-Kate Olsen
Libérer: 2025-01-08 17:26:40
original
444 Les gens l'ont consulté

Why Does Casting a Float Expression to an Integer in C# Produce Different Results Depending on the Method?

Comportement inhabituel de la conversion C# float en entier

L'extrait de code suivant démontre un comportement inattendu de la conversion de virgule flottante en nombre entier en C# :

<code class="language-csharp">int speed1 = (int)(6.2f * 10);
float tmp = 6.2f * 10;
int speed2 = (int)tmp;</code>
Copier après la connexion

Étonnamment, speed1 a une valeur de 61, tandis que speed2 a une valeur de 62, même si tous deux s'attendent à ce que le résultat soit de 62. Une inspection minutieuse révèle que dans speed1 l'expression à virgule flottante 6.2f * 10 est implicitement convertie en type double avant d'être tronquée en un entier, ce qui donne un résultat de 61.

Cependant, dans speed2, le résultat de 6.2f * 10 est explicitement affecté à la variable float tmp. Cette étape intermédiaire consiste à arrondir la valeur à la valeur float la plus proche, soit 62, puis à la convertir en nombre entier.

La principale différence entre les deux opérations est la représentation intermédiaire. Dans le premier cas, le compilateur peut choisir de réserver une représentation de plus grande précision pour l'expression à virgule flottante, provoquant une troncature et donnant une valeur de 61. Cependant, dans le deuxième cas, l'affectation explicite float force l'arrondi, ce qui donne une valeur de 62.

Dans les actions suivantes :

<code class="language-csharp">double d = 6.2f * 10;
int tmp2 = (int)d;</code>
Copier après la connexion

d sera de type double, provoquant la conversion de double et la valeur arrondie tronquée en un entier, ce qui donne généralement une valeur de 62.

Un comportement inattendu dans les conversions d'expressions à virgule flottante est un aspect subtil de la gestion des virgules flottantes en C#. Comprendre cette nuance est essentiel pour éviter des résultats inattendus et garantir des conversions précises entre les types numériques.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal