Benutzerdefinierte Zahlenformatzeichenfolgen

Aktualisiert: Juli 2008

Eine von Ihnen erstellte und aus einem oder mehreren benutzerdefinierten Zahlenformatbezeichnern bestehende benutzerdefinierte Zahlenformatzeichenfolge definiert, wie numerische Daten formatiert werden. Eine benutzerdefinierte Zahlenformatzeichenfolge wird wie jede Zeichenfolge definiert, bei der es sich nicht um eine standardmäßige Zahlenformatzeichenfolge handelt.

In der folgenden Tabelle werden die benutzerdefinierten Zahlenformatbezeichner beschrieben. Weitere Informationen finden Sie in den Hinweisen unterhalb der Tabelle.

Formatbezeichner

Name

Beschreibung

0

0-Platzhalter

Wenn der zu formatierende Wert über eine Ziffer an der Stelle verfügt, an der die '0' in der Formatzeichenfolge steht, wird diese Ziffer in die Ergebniszeichenfolge kopiert; andernfalls erscheint eine '0' in der Ergebniszeichenfolge. Die Positionen der '0', die am weitesten links vor dem Dezimaltrennzeichen steht, und der '0', die am weitesten rechts hinter dem Dezimaltrennzeichen steht, bestimmen den Bereich der Ziffern, die immer in der Ergebniszeichenfolge enthalten sind.

Mit dem Bezeichner "00" wird der Wert immer auf die direkt dem Dezimaltrennzeichen vorausgehende Zahl aufgerundet. Eine Formatierung des Werts 34.5 mit "00" ergibt z. B. den Wert 35.

Im folgenden Beispiel werden mehrere Werte angezeigt, die mit benutzerdefinierten Formatzeichenfolgen formatiert werden, in denen 0-Platzhalter enthalten sind.

Dim value As Double
value = 123
Console.WriteLine(value.ToString("00000"))
' Displays 00123
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .56
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
' Displays 0.6
value = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", _
CultureInfo.CreateSpecificCulture("el-GR")))
' Displays 1.234.567.890
double value;
value = 123;
Console.WriteLine(value.ToString("00000"));
// Displays 00123
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .56;
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
// Displays 0.6
value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#",
CultureInfo.CreateSpecificCulture("el-GR")));
// Displays 1.234.567.890

#

Ziffernplatzhalter

Wenn der zu formatierende Wert über eine Ziffer an der Stelle verfügt, an der '#' in der Formatzeichenfolge steht, wird diese Ziffer in die Ergebniszeichenfolge kopiert. Andernfalls wird an dieser Position nichts in der Ergebniszeichenfolge gespeichert.

Beachten Sie, dass dieser Bezeichner nie das '0'-Zeichen anzeigt, wenn es sich nicht um eine signifikante Ziffer handelt, auch wenn '0' die einzige Ziffer in der Zeichenfolge ist. Das '0'-Zeichen wird angezeigt, wenn es sich um eine signifikante Ziffer in der angezeigten Zahl handelt.

Mit der Formatzeichenfolge "##" wird der Wert immer auf die direkt dem Dezimaltrennzeichen vorausgehende Zahl aufgerundet. Eine Formatierung des Werts 34.5 mit "##" ergibt z. B. den Wert 35.

Im folgenden Beispiel werden mehrere Werte angezeigt, die mit benutzerdefinierten Formatzeichenfolgen formatiert werden, in denen Ziffernplatzhalter enthalten sind.

Dim value As Double
value = 1.2
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
' Displays 1.2
value = 123
Console.WriteLine(value.ToString("#####"))
' Displays 123
value = 123456
Console.WriteLine(value.ToString("[##-##-##]"))
' Displays [12-34-56]
value = 1234567890
Console.WriteLine(value.ToString("#"))
' Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"))
' Displays (123) 456-7890
double value;
value = 1.2;
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
// Displays 1.2
value = 123;
Console.WriteLine(value.ToString("#####"));
// Displays 123
value = 123456;
Console.WriteLine(value.ToString("[##-##-##]"));
// Displays [12-34-56]
value = 1234567890;
Console.WriteLine(value.ToString("#"));
// Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"));
// Displays (123) 456-7890

.

Dezimaltrennzeichen

Das erste '.'-Zeichen in der Formatzeichenfolge bestimmt die Position des Dezimaltrennzeichens im formatierten Wert. Alle weiteren '.'-Zeichen werden ignoriert.

Das für das Dezimaltrennzeichen in der Ergebniszeichenfolge verwendete Zeichen wird durch die NumberDecimalSeparator-Eigenschaft des NumberFormatInfo-Objekts bestimmt, die die Formatierung steuert.

Im folgenden Beispiels wird der Dezimalzeichen-Formatbezeichner verwendet, um die Position des Dezimalzeichens in mehreren Ergebniszeichenfolgeketten zu definieren.

Dim value As Double
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
value = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
double value;
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%
value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4

,

Tausendertrennzeichen und Zahlenskalierung

Das Zeichen ',' dient als Bezeichner für Tausendertrennzeichen und für Zahlenskalierung.

Bezeichner für Tausendertrennzeichen: Wenn ein oder mehrere ','-Zeichen zwischen zwei Ziffernplatzhaltern (0 oder #) angegeben sind, die die ganzzahligen Ziffern einer Zahl formatieren, wird zwischen jeder Zahlengruppe im ganzzahligen Teil der Ausgabe ein Gruppentrennzeichen eingefügt.

Die NumberGroupSeparator-Eigenschaft und die NumberGroupSizes-Eigenschaft des aktuellen NumberFormatInfo-Objekts bestimmen das als Zahlengruppentrennzeichen verwendete Zeichen und die Größe der einzelnen Zahlengruppen. Wenn z. B. zum Formatieren der Zahl 1000 die Zeichenfolge "#,#" und die invariante Kultur verwendet werden, lautet die Ausgabe "1,000".

Bezeichner für Zahlenskalierung: Wenn direkt links neben dem expliziten oder impliziten Dezimaltrennzeichen ein oder mehrere ','-Zeichen angegeben sind, wird die zu formatierende Zahl bei jedem Vorkommen eines Bezeichners für Zahlenskalierung durch 1000 dividiert. Wenn z. B. zum Formatieren der Zahl 100 Millionen die Zeichenfolge "0,," verwendet wird, lautet die Ausgabe "100".

Sie können in der gleichen Formatzeichenfolge sowohl Bezeichner für Tausendertrennzeichen als auch für Zahlenskalierung verwenden. Wenn z. B. zum Formatieren der Zahl 1 Milliarde die Zeichenfolge "#,0,," und die invariante Kultur verwendet werden, lautet die Ausgabe "1,000".

Das folgende Beispiel veranschaulicht der Verwendung des Kommas als Tausendertrennzeichen.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

Das folgende Beispiel veranschaulicht der Verwendung des Kommas als Bezeichner für die Zahlenskalierung.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
' Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
' Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));
// Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
// Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

%

Prozentplatzhalter

Wenn eine Formatzeichenfolge ein '%'-Zeichen enthält, wird die Zahl vor dem Formatieren mit 100 multipliziert. Das entsprechende Symbol wird in der Zahl an der Stelle eingefügt, an der '%' in der Formatzeichenfolge steht. Das verwendete Prozentzeichen ist von der aktuellen NumberFormatInfo-Klasse abhängig.

Im folgenden Beispiel werden mehrere benutzerdefinierte Formatzeichenfolgen definiert, in denen der Prozentplatzhalter enthalten ist.

Dim value As Double = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
double value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%

Promilleplatzhalter

Wenn eine Formatzeichenfolge das Zeichen '‰' (\u2030) enthält, wird die Zahl vor dem Formatieren mit 1.000 multipliziert. Das entsprechende Promillesymbol wird in der Rückgabezeichenfolge an der Stelle eingefügt, an der das Symbol '‰' in der Formatzeichenfolge steht. Das verwendete Promillezeichen wird von der NumberFormatInfo.PerMilleSymbol-Eigenschaft des Objekts definiert, das kulturspezifische Formatierungsinformationen zur Verfügung stellt.

Im folgenden Beispiel wird eine benutzerdefinierte Formatzeichenfolge definiert, in der der Promilleplatzhalter enthalten ist.

Dim value As Double = .00354
Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
' Displays 3.54 ‰
double value = .00354;
string perMilleFmt = "#0.## " + '\u2030';
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
// Displays 3.54‰

E0

E+0

E-0

e0

e+0

e-0

Wissenschaftliche Notation

Wenn die Formatzeichenfolge die Zeichenfolgen "E", "E+", "E-", "e", "e+" oder "e-" enthält und direkt danach mindestens ein '0'-Zeichen folgt, wird die Zahl mit der wissenschaftlichen Notation formatiert und ein 'E' bzw. 'e' zwischen der Zahl und dem Exponenten eingefügt. Die Anzahl der '0'-Zeichen nach dem Bezeichner für die wissenschaftliche Notation bestimmt die Mindestanzahl von Ziffern, die für den Exponenten ausgegeben werden. Das "E+"-Format und das "e+"-Format geben an, dass immer ein Vorzeichen (Plus oder Minus) vor dem Exponenten steht. Die Formate "E", "E-", "e" oder "e-" geben an, dass nur vor negativen Exponenten ein Vorzeichen steht.

Im folgenden Beispiel werden mehrere numerische Werte mit den Bezeichnern für die wissenschaftliche Notation formatiert.

Dim value As Double = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
' Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
' Displays 8.6E004
double value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
// Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
// Displays 8.6E004

\

Escapezeichen

In C# und for C++ wird das auf den umgekehrten Schrägstrich folgende Zeichen in der Formatzeichenfolge als Escapesequenz interpretiert. Es wird mit herkömmlichen Formatzeichenfolgen wie '\n' (neue Zeile) verwendet.

In einigen Sprachen muss vor dem Excapezeichen aber weiteres Escapezeichen stehen, wenn es als Literal verwendet wird. Andernfalls interpretiert der Compiler das Zeichen als Escapesequenz. Verwenden Sie die Zeichenfolge "\\", um '\' anzuzeigen.

Beachten Sie, dass das Escapezeichen in Visual Basic nicht unterstützt wird. ControlChars stellt jedoch die gleichen Funktionen bereit.

'ABC'

"ABC"

Zeichenfolgenliteral

Zeichen, die in einfachen bzw. doppelten Anführungszeichen stehen, werden in die Ergebniszeichenfolge kopiert, ohne die Formatierung zu beeinflussen.

;

Abschnittstrennzeichen

Mit dem ';'-Zeichen werden Abschnitte für positive und negative Zahlen sowie Nullen in der Formatzeichenfolge voneinander getrennt. Wenn zwei Abschnitte in der benutzerdefinierten Formatzeichenfolge vorhanden sind, definiert der weitesten links stehende Abschnitt die Formatierung positiver Zahlen und Nullen, während der am weitesten rechts stehende Abschnitt die Formatierung negativer Zahlen definiert. Wenn drei Abschnitte vorhanden sind, definiert der linke Abschnitt die Formatierung positiver Zahlen, der mittlere Abschnitt die Formatierung negativer Zahlen und der rechte Abschnitt die Formatierung von Nullen.

Im folgenden Beispiel wird der Formatbezeichner für das Abschnittstrennzeichen verwendet, um positive und negative Zahlen sowie Nullen unterschiedlich zu formatieren.

Dim posValue As Double = 1234
Dim negValue As Double = -1234
Dim fmt As String = "##;(##)"
Console.WriteLine(posValue.ToString(fmt)) ' Displays 1234
Console.WriteLine(negValue.ToString(fmt)) ' Displays (1234)
double posValue = 1234;
double negValue = -1234;
string fmt = "##;(##)";
Console.WriteLine(posValue.ToString(fmt)); // Displays 1234
Console.WriteLine(negValue.ToString(fmt)); // Displays (1234)

Sonstige

Alle anderen Zeichen

Jedes andere Zeichen wird in die Ergebniszeichenfolge kopiert, ohne die Formatierung zu beeinflussen.

Hinweise

Unendlichkeiten und NaN bei Gleitkommawerten

Wenn der Wert eines Single-Gleitkommatyps oder eines Double-Gleitkommatyps positiv unendlich, negativ unendlich oder keine Zahl (Not a Number, NaN) ist, handelt es sich bei der formatierten Zeichenfolge unabhängig von der Formatzeichenfolge um den Wert der entsprechenden PositiveInfinitySymbol-Eigenschaft, NegativeInfinitySymbol-Eigenschaft oder NaNSymbol-Eigenschaft, die durch das derzeit gültige NumberFormatInfo-Objekt angegeben wird.

Einstellungen der Systemsteuerung

Die Einstellungen der Regions- und Sprachoptionen in der Systemsteuerung beeinflussen die durch einen Formatierungsvorgang erstellte Ergebniszeichenfolge. Mithilfe dieser Einstellungen wird das NumberFormatInfo-Objekt initialisiert, das der aktuellen Threadkultur zugeordnet ist. Diese wiederum stellt die Werte zur Steuerung der Formatierung bereit. Auf Computern mit unterschiedlichen Einstellungen werden unterschiedliche Ergebniszeichenfolgen generiert.

Rundung bei Formatzeichenfolgen mit Festkomma

Bei Formatzeichenfolgen mit Festkomma (d. h. Formatzeichenfolgen, die keine Zeichen im wissenschaftlichen Notationsformat enthalten) werden die Zahlen auf die Anzahl von Dezimalstellen gerundet, die rechts neben dem Dezimaltrennzeichen als Ziffernplatzhalter vorhanden sind. Wenn die Formatzeichenfolge kein Dezimaltrennzeichen enthält, wird die Zahl auf die nächste ganze Zahl gerundet. Wenn die Zahl über mehr Ziffern verfügt, als Ziffernplatzhalter links neben dem Dezimaltrennzeichen stehen, werden die zusätzlichen Ziffern direkt vor dem ersten Ziffernplatzhalter in die Ergebniszeichenfolge kopiert.

Abschnittstrennzeichen und bedingte Formatierung

Je nachdem, ob der Wert positiv, negativ oder 0 ist, können unterschiedliche Formatierungen angewendet werden. Dafür kann eine benutzerdefinierte Formatzeichenfolge bis zu drei durch Semikolons getrennte Abschnitte enthalten. Diese Abschnitte werden in der folgenden Tabelle beschrieben.

Anzahl der Abschnitte

Beschreibung

Ein Abschnitt

Die Formatzeichenfolge gilt für alle Werte.

Zwei Abschnitte

Der erste Abschnitt gilt für positive Werte und Nullen, der zweite Abschnitt für negative Werte.

Wenn die zu formatierende Zahl negativ ist, aber nach dem Runden entsprechend dem Format im zweiten Abschnitt 0 ist, wird die resultierende 0 entsprechend dem ersten Abschnitt formatiert.

Drei Abschnitte

Der erste Abschnitt gilt für positive Werte, der zweite Abschnitt für negative Werte und der dritte Abschnitt für Nullen.

Wenn der zweite Abschnitt leer ist (zwischen den Semikolons wird nichts angegeben), wird der erste Abschnitt auf alle Werte angewendet, die nicht 0 (null) sind.

Wenn die zu formatierende Zahl nicht 0 ist, aber nach dem Runden entsprechend dem Format im ersten oder im zweiten Abschnitt 0 ist, wird die resultierende 0 entsprechend dem dritten Abschnitt formatiert.

Abschnittstrennzeichen ignorieren alle bereits vorhandenen Formatierungen für Zahlen, wenn der letzte Wert formatiert wird. Negative Werte werden z. B. immer ohne Minuszeichen angezeigt, wenn Abschnittstrennzeichen verwendet werden. Wenn der letzte formatierte Wert ein Minuszeichen aufweisen soll, muss das Minuszeichen explizit als Teil des benutzerdefinierten Formatbezeichners aufgenommen werden.

Die folgende Codefragmente veranschaulichen, wie Abschnittstrennzeichen zum Erstellen von formatierten Zeichenfolgen verwendet werden.

Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0

' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

Zwei Beispiele für benutzerdefinierte Formate

Die folgenden Codefragmente veranschaulichen die benutzerdefinierte Formatierung numerischer Daten. In beiden Fällen werden die numerischen Daten in der benutzerdefinierten Formatzeichenfolge durch einen Ziffernplatzhalter (#) angezeigt. Alle anderen Zeichen werden in die Ausgabe kopiert.

Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value: 
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value: 
// "My Number = 42".

Siehe auch

Konzepte

Zahlenformatzeichenfolgen

Standardmäßige Zahlenformatzeichenfolgen

Referenz

NumberFormatInfo

Weitere Ressourcen

Formatierung von Typen

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Promilleplatzhalter hinzugefügt.

Korrektur inhaltlicher Fehler.