Heim > Backend-Entwicklung > C++ > Warum führt die Umwandlung von Floats in Ints in C# je nach Methode zu unterschiedlichen Ergebnissen?

Warum führt die Umwandlung von Floats in Ints in C# je nach Methode zu unterschiedlichen Ergebnissen?

Susan Sarandon
Freigeben: 2025-01-08 17:22:40
Original
432 Leute haben es durchsucht

Why Do Casting Floats to Ints in C# Produce Different Results Depending on the Method?

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>
Nach dem Login kopieren

Theoretisch sollten Geschwindigkeit1 und Geschwindigkeit2 den gleichen Wert ergeben, aber überraschenderweise sind die Ergebnisse unterschiedlich:

<code>speed1 = 61
speed2 = 62</code>
Nach dem Login kopieren

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!

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