Freigeben über


Standardmäßige Zahlenformatanalysegenauigkeit

.NET unterstützt jetzt höhere Genauigkeitswerte, wenn Zahlen als Zeichenfolgen formatiert werden, mit ToString und TryFormat.

Hinweis

Die maximale Genauigkeit wurde in .NET 7 erneut geändert. Weitere Informationen finden Sie unter "Maximale Genauigkeit für numerische Formatzeichenfolgen".

Änderungsbeschreibung

Beim Formatieren von Zahlen als Zeichenfolgen stellt der Genauigkeitsbezeichner in der Formatzeichenfolge die Anzahl der Ziffern in der resultierenden Zeichenfolge dar. Je nach Formatbezeichner, bei dem es sich um das Zeichen am Anfang der Zeichenfolge handelt, kann die Genauigkeit die Gesamtanzahl der Ziffern, die Anzahl der signifikanten Ziffern oder die Anzahl der Dezimalziffern darstellen.

In früheren .NET-Versionen ist die Standardmäßige Numerische Formatanalyselogik auf eine Genauigkeit von 99 oder weniger beschränkt. Einige numerische Typen weisen eine größere Genauigkeit auf, jedoch zeigt ToString(string format) sie nicht richtig an. Wenn Sie beispielsweise eine Genauigkeit angeben, die größer als 99 ist, 32.ToString("C100")wird die Formatzeichenfolge als benutzerdefinierte numerische Formatzeichenfolge anstelle von "Währung mit Genauigkeit 100" interpretiert. In benutzerdefinierten zahlenformatischen Zeichenfolgen werden Zeichen als Zeichenliterale interpretiert. Darüber hinaus wird eine Formatzeichenfolge, die einen ungültigen Formatbezeichner enthält, je nach Genauigkeitswert unterschiedlich interpretiert. H99 löst eine FormatException-Ausnahme für den ungültigen Formatspezifizierer aus, während H100 als benutzerdefinierte numerische Formatzeichenfolge interpretiert wird.

Ab .NET 6 unterstützt .NET die Genauigkeit bis zu Int32.MaxValue. Eine Formatzeichenfolge, die aus einem Formatbezeichner mit einer beliebigen Anzahl von Ziffern besteht, wird als standardmäßige numerische Formatzeichenfolge mit Genauigkeit interpretiert. Eine FormatException-Ausnahme wird für eine oder beide der folgenden Bedingungen ausgelöst:

Diese Änderung wurde in der Analyselogik implementiert, die sich auf alle numerischen Typen auswirkt.

Die folgende Tabelle zeigt die Verhaltensänderungen für verschiedene Formatzeichenfolgen.

Formatzeichenfolge Vorheriges Verhalten Verhalten ab .NET 6
C2 Gibt die Währung mit zwei Dezimalziffern an. Gibt die Währung mit zwei Dezimalziffern an (keine Änderung)
C100 Bezeichnet eine benutzerdefinierte numerische Formatzeichenfolge, die "C100" ausgibt Gibt die Währung mit 100 Dezimalziffern an.
H99 Löst aufgrund eines ungültigen Standardformatspezifizierers "H" eine FormatException-Ausnahme aus Löst aufgrund eines ungültigen Standardformatspezifizierers "H" eine FormatException-Ausnahme aus (keine Änderung)
H100 Gibt eine benutzerdefinierte zahlenformatige Zeichenfolge an. Löst aufgrund eines ungültigen Standardformatspezifizierers "H" eine FormatException-Ausnahme aus

Eingeführte Version

.NET 6

Grund für Änderung

Diese Änderung korrigiert unerwartetes Verhalten bei verwendung höherer Genauigkeit für die Analyse numerischer Formate.

In den meisten Fällen ist keine Aktion erforderlich, und die richtige Genauigkeit wird in den resultierenden Zeichenfolgen angezeigt.

Wenn Sie jedoch das vorherige Verhalten wiederherstellen möchten, bei dem der Formatspezifizierer als Literalzeichen interpretiert wird, wenn der Genauigkeitswert über 99 liegt, können Sie dieses Zeichen in einfachen Anführungszeichen umschließen oder mit einem umgekehrten Schrägstrich als Escapezeichen versehen. In früheren Versionen von .NET gibt 42.ToString("G999") beispielsweise G999 zurück. Um dieses Verhalten beizubehalten, ändern Sie die Formatzeichenfolge in "'G'999" oder "\\G999". Dies funktioniert unter .NET Framework, .NET Core und .NET 5+.

Die folgenden Formatzeichenfolgen werden weiterhin als benutzerdefinierte numerische Formatzeichenfolgen interpretiert:

  • Beginnen Sie mit einem beliebigen Zeichen, das kein ASCII-alphabetisches Zeichen ist, wie zum Beispiel $ oder è.
  • Beginnen Sie mit einem ALPHABETISCHEN ASCII-Zeichen, auf das keine ASCII-Ziffer folgt, A$z. B. . .
  • Beginnen Sie mit einem ALPHABETISCHEN ASCII-Zeichen, gefolgt von einer ASCII-Ziffernfolge, und dann mit jedem Zeichen, das kein ASCII-Ziffernzeichen ist, A12Az. B. .

Betroffene APIs

Diese Änderung wurde in der Analyselogik implementiert, die sich auf alle numerischen Typen auswirkt.

Siehe auch