Heim > Backend-Entwicklung > C++ > Warum funktioniert „x == 0.1' nicht mit „double x = 0.1' in C#?

Warum funktioniert „x == 0.1' nicht mit „double x = 0.1' in C#?

Susan Sarandon
Freigeben: 2025-01-22 20:51:13
Original
635 Leute haben es durchsucht

Why Doesn't `x == 0.1` Work with `double x = 0.1` in C#?

Gleitkommazahlenvergleich in C#: Dezimaldilemma

In C# können beim Vergleichen von Werten vom Typ double einige Probleme auftreten. Betrachten Sie den folgenden Code:

<code class="language-csharp">double x = 0.1;
if (x == 0.1)
{
    // ...
}</code>
Nach dem Login kopieren

Überraschenderweise kommt dieser Code nicht in die if-Anweisung vor. Warum ist das so?

Problem mit Gleitkommazahlen

Die Wurzel des Problems liegt in der Art und Weise, wie Computer Gleitkommazahlen darstellen (insbesondere double). Im Gegensatz zu ganzen Zahlen verwendet double binäre Brüche anstelle von Dezimalbrüchen. Das bedeutet, dass einige Dezimalwerte, wie zum Beispiel 0,1, nicht exakt gespeichert werden können.

Zum Beispiel wird 0,1 in der Binärschreibweise als 0,000110011001100110011001 dargestellt.... Der Computer schneidet diese Endlosschleife von Dezimalstellen in eine endliche Darstellung ab, die möglicherweise nicht genau dem erwarteten Wert entspricht.

Lösung

Um dieses Problem zu lösen, können Sie die folgenden Methoden in Betracht ziehen:

  • Verwendung des Typs decimal: Der Typ decimal speichert Zahlen in Dezimalschreibweise und ermöglicht so eine präzise Darstellung.
  • Epsilon-Vergleich: Verwenden Sie eine kleine Fehlermarge (z. B. Math.Abs(x - 0.1)), um Gleitkommazahlen zu vergleichen.

Erläuterung der Gründe

Binäre Brüche unterscheiden sich von dezimalen Brüchen in ihrer Fähigkeit, bestimmte Zahlen darzustellen. Beispielsweise kann die Zahl 1/10 nicht exakt binär dargestellt werden, was dazu führt, dass ihre Binärentwicklung ungefähr 0,0001100 beträgt... Der Rundungsprozess des Computers führt zu Ungenauigkeiten beim Speichern von Gleitkommazahlen.

Das obige ist der detaillierte Inhalt vonWarum funktioniert „x == 0.1' nicht mit „double x = 0.1' in C#?. 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