Formatieren und Runden mit .NET in der PowerShell

Im letzten Blogeintrag haben wir uns angeschaut, wie man mit Währungssymbolen und den regionalen Besonderheiten arbeiten kann.

In diesem Blogeintrag schauen wir uns an, wie man mit einer .NET Methode Werte formatieren und runden kann.

Hier ist das Beispiel aus dem letzten Blogeintrag:

PS C:\> $wert = -12345.67

PS C:\> "{0:C2}" -f $wert

-12.345,67 €

PS C:\> $wert = -12345.67
PS C:\> "{0:C2}" -f $wert
-12.345,67 €

Wie ist diese ungewöhnliche Methode „{0:C2}“ –f aufgebaut?

Die erste Zahl ist der Index der Methode, der Buchstabe nach dem Doppelpunkt gibt das Grundformat vor und die Zahl hinter dem Buchstaben legt die Anzahl der zu bearbeitenden Stellen/Nachkommastellen fest.

Folgende Grundformate gibt es:

Grundformat Symbol Beispiel Funktion
Numeric N "{0:N2}" –f 12345.345

12.345,35

Formatiert die Zahl mit Tausend-Trennern und rundet auf 2 Nachkommastellen
Decimal D "{0:D8}" –f 1234

00001234

Gibt die Zahl 8 stellig aus und füllt bei Bedarf mit Nullen auf
Currency C "{0:C2}" –f 12345.345

12.345,35 €

Formatiert die Zahl als Währung mit Tausend-Trennern und rundet auf 2 Nachkommastellen
Percentage P "{0:P1}" –f 0.275

27,5%

Formatiert die Zahl als Prozentwert und rundet auf eine Nachkommastelle
Hexadecimal H "{0:X8}" –f 255

000000FF

Wandelt die Dezimalzahl in eine Hexadezimalzahl und füllt bei Bedarf mit Nullen auf

 

PS C:\> "{0:N2}" –f 12345.345
12.345,35
PS C:\> "{0:D8}" –f 1234
00001234
PS C:\> "{0:C2}" –f 12345.345
12.345,35 €
PS C:\> "{0:P1}" –f 0.275
27,5%
PS C:\> "{0:X8}" –f 255
000000FF

 

Auch hier gelten die unterschiedlichen Formatierungsregeln der regionalen Einstellungen.

Die Befehle auf einem US-Englischen Server ausgeführt ergeben anders formatierte Ergebnisse:

PS C:\> "{0:N2}" –f 12345.345

12,345.35

PS C:\> "{0:D8}" –f 1234

00001234

PS C:\> "{0:C2}" –f 12345.345

$12,345.35

PS C:\> "{0:P1}" –f 0.275

27.5 %

PS C:\> "{0:X8}" –f 255

000000FF

PS C:\> "{0:N2}" –f 12345.345
12,345.35
PS C:\> "{0:D8}" –f 1234
00001234
PS C:\> "{0:C2}" –f 12345.345
$12,345.35
PS C:\> "{0:P1}" –f 0.275
27.5 %
PS C:\> "{0:X8}" –f 255
000000FF

 

Was hat es mit den Anführungszeichen und dem Index auf sich? Hier hatte ich selber auch länger gerätselt. Der Index bezieht sich auf die Werte-Position nach dem –f.

Ich kann mehrere Werte in einer Zeile bearbeiten und ausgeben. In der Praxis habe ich es noch nie gebraucht.

Hier trotzdem ein Beispiel:

PS C:\> $volume = 1000

PS C:\> $daten = 123.456

PS C:\> "Datenmenge: {0:N2} GB, das sind {1:P0} Prozent des Volumes" –f $daten,($daten/$volume)

Datenmenge: 123,46 GB, das sind 12 % Prozent des Volumes

PS C:\> $volume = 1000
PS C:\> $daten = 123.456
PS C:\> "Datenmenge: {0:N2} GB, das sind {1:P0} Prozent des Volumes" –f $daten,($daten/$volume)
Datenmenge: 123,46 GB, das sind 12 % Prozent des Volumes

Eine weitere Möglichkeit zum ganzzahligen Runden ist die round Methode aus der Mathematischen .NET Bibliothek.

[math]::Round(1.234)

1

PS C:\> [math]::Round(1.234)
1

 

Überraschend ist folgendes Ergebnis: Wir Runden die Zahlen 3.5 und 4.5 und bekommen bei beiden Rundungen die Zahl 4 als Ergebnis

PS C:\> [math]::Round(3.5)

4

PS C:\> [math]::Round(4.5)

4

PS C:\> [math]::Round(3.5)
4
PS C:\> [math]::Round(4.5)
4

Warum das so ist und wie man das beeinflussen kann steht im nächsten Blogeintrag, der von dem Thema mathematische .NET Methoden handelt.

 

Was denken Sie?

Pflichtfelder sind mit einem * markiert.