Gleitkomma-Präzisionsprobleme bei der C#-Multiplikation
Sehen wir uns den C#-Codeausschnitt an:
<code class="language-csharp">double i = 10 * 0.69;</code>
Während Sie erwarten würden, dass i
6,9 entspricht, beträgt die tatsächliche Ausgabe oft 6,8999999999999995. Diese Diskrepanz ergibt sich aus den inhärenten Einschränkungen der Gleitkomma-Arithmetik innerhalb des .NET-Frameworks.
Gleitkommazahlen werden im Gegensatz zu Dezimalzahlen in binären Formaten dargestellt. Diese binäre Darstellung bedeutet, dass bestimmte Dezimalwerte, einschließlich solcher mit sich unendlich wiederholenden Dezimalteilen wie 0,69, nicht perfekt ausgedrückt werden können. Stattdessen handelt es sich um Näherungswerte.
Der Compiler ist sich dieser Einschränkung bewusst und optimiert die Berechnung häufig, indem er eine enge Näherung von 6,9 direkt speichert, anstatt 10 * 0.69
zur Laufzeit zu berechnen. Diese Näherung erklärt den beobachteten leichten Unterschied.
Um eine höhere Genauigkeit zu erreichen, insbesondere bei Finanzanwendungen, sollten Sie die Verwendung des Datentyps decimal
in Betracht ziehen. decimal
verwendet eine Basis-10-Darstellung, die eine präzisere Darstellung von Dezimalzahlen wie 0,69 ermöglicht und so die Rundungsfehler minimiert, die mit der binären Gleitkomma-Arithmetik verbunden sind.
Das obige ist der detaillierte Inhalt vonWarum ist 10 * 0,69 in C# nicht genau 6,9?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!