.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:
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.Math.Round()
oder String-Formatierung mit NumberFormatInfo
ermöglichen es Ihnen, das Ergebnis auf die gewünschte Genauigkeitsstufe zu runden.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!