Unterschiede beim Umwandeln von Gleitkommazahlen in Ganzzahlen in C#: Die Konvertierungsmethode wirkt sich auf die Ergebnisse aus
In C# kann es bei der Gleitkomma-Arithmetik zu unerwartetem Verhalten kommen, wenn das Ergebnis in eine ganze Zahl umgewandelt wird. Betrachten Sie den folgenden Codeausschnitt:
<code class="language-csharp">int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp;</code>
Theoretisch sollten Geschwindigkeit1 und Geschwindigkeit2 den gleichen Wert ergeben, aber überraschenderweise sind die Ergebnisse unterschiedlich:
<code>speed1 = 61 speed2 = 62</code>
Warum passiert das?
Der Kern des Problems ist die Gleitkomma-Arithmetik, die zu Rundungsfehlern führen kann. In (int)(6.2f 10) wird der Wert 6.2f 10 (ungefähr 61,999998) auf eine Ganzzahl gekürzt, was zu 61 führt.
Im Gegensatz dazu wird in int speed2 = (int)tmp der Wert 6,2f * 10 zunächst auf den nächsten Gleitkommawert gerundet, der 62 ist. Dieser gerundete Wert wird dann in eine Ganzzahl umgewandelt, was 62 ergibt.
Um ein vorhersehbares Verhalten sicherzustellen, wird im Allgemeinen empfohlen, Math.Round oder ähnliche Funktionen für Rundungsoperationen zu verwenden, anstatt sich auf implizite Konvertierungen zu verlassen.
Das obige ist der detaillierte Inhalt vonWarum führt die Umwandlung von Floats in Ints in C# je nach Methode zu unterschiedlichen Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!