Heim > Backend-Entwicklung > C++ > Warum führt die Umwandlung eines Float-Ausdrucks in eine Ganzzahl in C# je nach Methode zu unterschiedlichen Ergebnissen?

Warum führt die Umwandlung eines Float-Ausdrucks in eine Ganzzahl in C# je nach Methode zu unterschiedlichen Ergebnissen?

Mary-Kate Olsen
Freigeben: 2025-01-08 17:26:40
Original
444 Leute haben es durchsucht

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

Ungewöhnliches Verhalten der C#-Float-zu-Integer-Konvertierung

Der folgende Codeausschnitt zeigt unerwartetes Verhalten bei der Konvertierung von Gleitkommazahlen in Ganzzahlen in C#:

<code class="language-csharp">int speed1 = (int)(6.2f * 10);
float tmp = 6.2f * 10;
int speed2 = (int)tmp;</code>
Nach dem Login kopieren

Überraschenderweise hat speed1 einen Wert von 61, während speed2 einen Wert von 62 hat, obwohl beide ein Ergebnis von 62 erwarten. Eine genaue Betrachtung zeigt, dass in speed1 der Gleitkommaausdruck 6.2f * 10 implizit in den Typ double konvertiert wird, bevor er auf eine Ganzzahl gekürzt wird, was zu einem Ergebnis von 61 führt.

Allerdings wird in speed2 das Ergebnis von 6.2f * 10 explizit der float-Variable tmp zugewiesen. Dieser Zwischenschritt besteht darin, den Wert auf den nächsten float-Wert, also 62, zu runden und ihn dann in eine Ganzzahl umzuwandeln.

Der Hauptunterschied zwischen den beiden Operationen ist die Zwischendarstellung. Im ersten Fall könnte sich der Compiler dafür entscheiden, eine Darstellung mit höherer Genauigkeit für den Gleitkommaausdruck zu reservieren, was zu einer Kürzung führt und einen Wert von 61 ergibt. Im zweiten Fall erzwingt die explizite float-Zuweisung jedoch eine Rundung, was zu einem Wert von 62 führt.

In den folgenden Aktionen:

<code class="language-csharp">double d = 6.2f * 10;
int tmp2 = (int)d;</code>
Nach dem Login kopieren

d ist vom Typ double, wodurch double konvertiert und der gerundete Wert auf eine Ganzzahl gekürzt wird, was normalerweise zu einem Wert von 62 führt.

Unerwartetes Verhalten bei der Konvertierung von Gleitkommaausdrücken ist ein subtiler Aspekt der Gleitkommabehandlung von C#. Das Verständnis dieser Nuance ist von entscheidender Bedeutung, um unerwartete Ergebnisse zu vermeiden und genaue Konvertierungen zwischen numerischen Typen sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum führt die Umwandlung eines Float-Ausdrucks in eine Ganzzahl in C# je nach Methode zu unterschiedlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage