Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

NumberFormatInfo-Klasse

Aktualisiert: November 2007

Definiert, wie numerische Werte abhängig von der jeweiligen Kultur formatiert und angezeigt werden.

Namespace:  System.Globalization
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class NumberFormatInfo : ICloneable, 
	IFormatProvider
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public final class NumberFormatInfo implements ICloneable, 
	IFormatProvider
public final class NumberFormatInfo implements ICloneable, IFormatProvider

Diese Klasse enthält u. a. Informationen über Währung, Dezimaltrennzeichen und andere numerische Symbole.

Zum Erstellen eines NumberFormatInfo-Objekts für eine bestimmte Kultur erstellt die Anwendung ein CultureInfo-Objekt für die jeweilige Kultur und ruft die CultureInfo.NumberFormat-Eigenschaft ab. Zum Erstellen eines NumberFormatInfo-Objekts für die Kultur des aktuellen Threads wird in der Anwendung die CurrentInfo-Eigenschaft verwendet. Zum Erstellen eines NumberFormatInfo-Objekts für die invariante Kultur wird in der Anwendung für eine schreibgeschützte Version die InvariantInfo-Eigenschaft oder für eine nicht schreibgeschützte Version der NumberFormatInfo-Konstruktor verwendet. Für eine neutrale Kultur kann kein NumberFormatInfo-Objekt erstellt werden.

In der Systemsteuerung können in den Regions- und Sprachoptionen einige Werte überschrieben werden, die der aktuellen Kultur von Windows zugeordnet sind. Beispielsweise können Benutzer das Datum in einem anderen Format anzeigen lassen oder eine andere Währung als die Standardwährung dieser Kultur verwenden. Wenn die CultureInfo.UseUserOverride-Eigenschaft auf true festgelegt ist, werden auch die Eigenschaften CultureInfo.DateTimeFormat, CultureInfo.NumberFormat und CultureInfo.TextInfo aus den Benutzereinstellungen abgerufen. Wenn die Benutzereinstellungen nicht mit der Kultur kompatibel sind, die dem CultureInfo-Objekt zugeordnet ist, weil z. B. der ausgewählte Kalender keiner der OptionalCalendars ist, sind die Methodenergebnisse und Eigenschaftenwerte nicht definiert.

In .NET Framework-Versionen vor Version 2.0 liest das Objekt die einzelnen vom Benutzer überschreibbaren Eigenschaften nur beim ersten Zugriff, wenn die Anwendung die CultureInfo.UseUserOverride-Eigenschaft auf true festlegt. Da NumberFormatInfo mehrere vom Benutzer überschreibbare Eigenschaften enthält, kann diese minimale Initialisierung zu Inkonsistenzen zwischen diesen Eigenschaften führen, wenn die Anwendung auf eine Eigenschaft zugreift, der Benutzer anschließend die Kultur wechselt oder Eigenschaften der aktuellen Kultur in der Systemsteuerung des Betriebssystems in den Regions- und Sprachoptionen überschreibt und die Anwendung dann auf eine andere Eigenschaft zugreift. In der beschriebenen Abfolge könnte z. B. auf CurrencyGroupSeparator zugegriffen werden. Anschließend kann der Benutzer die Muster in der Systemsteuerung des Betriebssystems ändern. Sobald auf CurrencyDecimalSeparator zugegriffen wird, werden die neuen Einstellungen übernommen. Eine ähnliche Inkonsistenz tritt auf, wenn der Benutzer in der Systemsteuerung die Benutzerkultur ändert.

In .NET Framework, Version 2.0 und höher, verwendet NumberFormatInfo die minimale Initialisierung nicht. Stattdessen werden alle vom Benutzer überschreibbaren Eigenschaften beim Erstellen gelesen. Es besteht trotzdem noch eine minimale Bedrohung, da weder das Erstellen des Objekts noch das Überschreiben durch den Benutzer atomare Vorgänge sind und die relevanten Werte während der Erstellung des Objekts geändert werden können. Dieses Sicherheitsrisiko tritt jedoch nur äußerst selten auf.

Numerische Werte werden mithilfe von Standard- oder benutzerdefinierten Mustern formatiert, die in den Eigenschaften einer NumberFormatInfo gespeichert sind. Zum Ändern der Anzeige eines Werts muss die Anwendung das NumberFormatInfo-Objekt schreibbar machen, sodass benutzerdefinierte Muster in den Eigenschaften gespeichert werden können.

In der folgenden Tabelle werden die Standardformatmuster für die einzelnen Standardformatbezeichner mit der jeweils zugeordneten NumberFormatInfo-Eigenschaft beschrieben, die zum Ändern der Standardformate festgelegt werden kann.

Formatmuster

Beschreibung und zugeordnete Eigenschaften

c, C

Währungsformat. Zugeordnete Eigenschaften:

CurrencyNegativePattern, CurrencyPositivePattern, CurrencySymbol, CurrencyGroupSizes, CurrencyGroupSeparator, CurrencyDecimalDigits, CurrencyDecimalSeparator.

d, D

Dezimales Format.

e, E

Wissenschaftliches Format (Exponentialformat).

f, F

Festkommaformat.

g, G

Allgemeines Format.

n, N

Zahlenformat. Zugeordnete Eigenschaften:

NumberNegativePattern, NumberGroupSizes, NumberGroupSeparator, NumberDecimalDigits, NumberDecimalSeparator.

p, P

Prozentformat. Bei Verwendung dieses Formats wird eine Zahl in eine Zeichenfolge konvertiert, die einen Prozentwert darstellt. Die Zeichenfolge ist durch die PercentPositivePattern-Eigenschaft definiert, wenn die Zahl positiv ist. Die Zeichenfolge ist durch die PercentNegativePattern-Eigenschaft definiert und beginnt mit einem Minuszeichen, wenn die Zahl negativ ist. Die konvertierte Zahl wird für die Darstellung als Prozentwert mit 100 multipliziert. Eine Genauigkeitsangabe, mit der die gewünschte Anzahl von Dezimalstellen angegeben wird, z. B. ist "{0:p6}" zulässig. Wenn die Genauigkeitsangabe fehlt, wird die von NumberFormatInfo unterstützte Standardgenauigkeit für Zahlen verwendet.

r, R

Roundtripformat. Durch die Verwendung dieses Formats wird sichergestellt, dass ein in eine Zeichenfolge umgewandelter numerischer Gleitkommawert bei der Rückkonvertierung in einen numerischen Wert denselben Wert aufweist. Dieses Format wird nur für den single-Typ und den double-Typ unterstützt. Ein mit diesem Formatmuster formatierter numerischer Wert wird zuerst mit dem allgemeinen Format getestet, wobei die Genauigkeit beim double-Typ 15 Ziffern und beim single-Typ 7 Ziffern beträgt. Wenn der Wert erfolgreich in den gleichen numerischen Wert rückkonvertiert werden kann, wird er mit dem Bezeichner für das allgemeine Format formatiert. Wenn der Wert jedoch nicht in den gleichen Wert rückkonvertiert werden kann, wird der Wert mit einer Genauigkeit von 17 Ziffern für double und 9 Ziffern für single formatiert.

Eine Genauigkeitsangabe kann an das Roundtripformatmuster angefügt werden, wird aber ignoriert. Bei diesem Formatmuster haben die Roundtrips höhere Priorität als die Genauigkeit.

x, X

Hexadezimales Format.

Ausführliche Informationen zu diesen Mustern finden Sie unter Standardmäßige Zahlenformatzeichenfolgen und Benutzerdefinierte Zahlenformatzeichenfolgen.

Ein NumberFormatInfo-Objekt kann nicht für neutrale Kulturen, sondern nur für die invariante Kultur oder für spezifische Kulturen erstellt werden. Weitere Informationen zur invarianten Kultur, spezifischen Kulturen und neutralen Kulturen finden Sie in der CultureInfo-Klasse.

NumberFormatInfo implementiert die ICloneable-Schnittstelle, um die Duplizierung von NumberFormatInfo-Objekten zu ermöglichen. Sie implementiert auch den IFormatProvider, um Anwendungen Formatierungsinformationen zur Verfügung zu stellen.

Im folgenden Codebeispiel wird gezeigt, wie ein NumberFormatInfo-Objekt für ein entsprechendes CultureInfo-Objekt abgerufen wird und wie mit dem abgerufenen Objekt die Formatierungsinformationen für Zahlen für die jeweilige Kultur abgerufen werden.

using System;
using System.Globalization;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        StringBuilder sb = new StringBuilder();

        // Loop through all the specific cultures known to the CLR.
        foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
        {
            // Only show the currency symbols for cultures that speak English.
            if (ci.TwoLetterISOLanguageName != "en") continue;

            // Display the culture name and currency symbol.
            NumberFormatInfo nfi = ci.NumberFormat;
            sb.AppendFormat("The currency symbol for '{0}' is '{1}'",
                ci.DisplayName, nfi.CurrencySymbol);
            sb.AppendLine();
        }
        Console.WriteLine(sb.ToString());
    }
}

// This code produces the following output.
//
// The currency symbol for 'English (United States)' is '$'
// The currency symbol for 'English (United Kingdom)' is ''
// The currency symbol for 'English (Australia)' is '$'
// The currency symbol for 'English (Canada)' is '$'
// The currency symbol for 'English (New Zealand)' is '$'
// The currency symbol for 'English (Ireland)' is '?'
// The currency symbol for 'English (South Africa)' is 'R'
// The currency symbol for 'English (Jamaica)' is 'J$'
// The currency symbol for 'English (Caribbean)' is '$'
// The currency symbol for 'English (Belize)' is 'BZ$'
// The currency symbol for 'English (Trinidad and Tobago)' is 'TT$'
// The currency symbol for 'English (Zimbabwe)' is 'Z$'
// The currency symbol for 'English (Republic of the Philippines)' is 'Php'


System.Object
  System.Globalization.NumberFormatInfo

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC, Xbox 360

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

XNA Framework

Unterstützt in: 2.0, 1.0
Anzeigen: