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>
Ü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>
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!