Heim > Backend-Entwicklung > C++ > Warum führt „i = 10 * 0,69;' in C# zu 6,8999999999999995 statt 6,9?

Warum führt „i = 10 * 0,69;' in C# zu 6,8999999999999995 statt 6,9?

Mary-Kate Olsen
Freigeben: 2025-01-10 08:57:41
Original
155 Leute haben es durchsucht

Why Does `i = 10 * 0.69;` in C# Result in 6.8999999999999995 Instead of 6.9?

.NET-Gleitkomma-Arithmetik und Präzisionsprobleme

In C# führt die Anweisung i = 10 * 0.69; überraschenderweise zu 6.8999999999999995 anstelle des erwarteten 6.9. Dies ist auf die inhärenten Einschränkungen der Darstellung und Arithmetik von Gleitkommazahlen innerhalb des .NET-Frameworks zurückzuführen.

Das Missverständnis ist, dass Dezimalwerte wie 0,69 perfekt binär dargestellt werden können. Gleitkommazahlen (wie double und float) verwenden jedoch ein Binärsystem, und viele Dezimalbrüche können nicht genau binär dargestellt werden, ebenso wie 1/3 nicht genau mit einer endlichen Anzahl von Dezimalstellen dargestellt werden kann. Der Compiler berechnet und speichert das Ergebnis während der Kompilierung als Konstante, aber dieser gespeicherte Wert ist eine Näherung des wahren mathematischen Ergebnisses.

Es gibt mehrere Lösungen, um dieses Präzisionsproblem anzugehen:

  • Verwenden Sie den Datentyp decimal: decimal bietet eine höhere Präzision und kann 6.9 genau darstellen. Allerdings kann die Verwendung von decimal im Vergleich zu double oder float zu einer geringfügig geringeren Leistung führen.
  • Rundung implementieren: Funktionen wie Math.Round() oder String-Formatierung mit NumberFormatInfo ermöglichen es Ihnen, das Ergebnis auf die gewünschte Genauigkeitsstufe zu runden.
  • Wertanpassung: Sie können die Eingabewerte leicht anpassen, um mögliche Rundungsfehler auszugleichen. Dieser Ansatz erhöht jedoch die Komplexität und kann zu neuen Ungenauigkeiten führen.

Um robusten und genauen numerischen Code zu schreiben, ist es wichtig, die Einschränkungen der Gleitkomma-Arithmetik zu verstehen. Durch den Einsatz geeigneter Techniken können Entwickler die Auswirkungen dieser Präzisionsbeschränkungen minimieren und zuverlässige mathematische Operationen gewährleisten.

Das obige ist der detaillierte Inhalt vonWarum führt „i = 10 * 0,69;' in C# zu 6,8999999999999995 statt 6,9?. 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