In diesem Beitrag möchte ich die Formatieren von Integer unter PowerShell etwas näher beschreiben. Oft sehen lange Zahlen schnell unübersichtlich aus. Da ist es hilfreich diese Zahlen in ein für das Auge lesbares Format zu bringen ohne dabei den eigentlichen Inhalt der Variable zu verändern.
Als repräsentative Zahlen dienen uns der Abstand zwischen Erde und Mond, Dies sind 384400 km. Leserlicher ist es in einem Format mit einem Punkt in Tausenderschritten; 364.400 km. Es ist auch möglich die Formatierung in Dezimal, Hexadezimal, Prozentual Werte oder als Betrag in einer Währung darzustellen.
Die Formatierung wird mittels .NET realisiert und sollte Programmierern aus C, C++ oder C# geläufig sein.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Formatieren eines Integer $AbstandErdeMond = 384400 "{0:N0} km" -f $AbstandErdeMond #Ausgabe #384.400 km ##### $AbstandErdeMond = 384400 "Die Entfernung des Mondes zur Erde beträgt {0:N0} km." -f $AbstandErdeMond #Ausgabe #Die Entfernung des Mondes zur Erde beträgt 384.400 km. |
Der Parameter –f gibt an welche Variable formatiert werden soll. Leider können nicht mehrere Werte hintereinander gesetzt werden wie im folgendem Beispiel.
Geht nicht:
1 2 3 4 5 6 7 8 |
#Formatieren eines Integer $AbstandErdeMond = 384400 $AbstandErdeSonne = 149600000 "Die Entfernung des Mondest zur Erde beträgt {0:N0} km. Die Erde ist rund {0:N0} km von der Sonne entfernt." -f $AbstandErdeMond, $AbstandErdeSonne #Ausgabe #Die Entfernung des Mondest zur Erde beträgt 384.400 km. Die Erde ist rund 384.400 km von der Sonne entfernt. |
Was allerdings geht ist den Wert vorher zu konvertieren und in der Variable zu speichern. Verdeutlicht an der Variable $AbstandErdeSonne.
1 2 3 4 5 6 7 8 9 10 11 |
#Formatieren eines Integer $AbstandErdeMond = 384400 $AbstandErdeSonne = "{0:N0}" -f 149600000 #oder $AbstandErdeSonne = 149600000 $AbstandErdeSonne = "{0:N0}" -f $AbstandErdeSonne "Die Entfernung des Mondes zur Erde beträgt {0:N0} km. Die Erde ist rund $($AbstandErdeSonne) km von der Sonne entfernt." -f $AbstandErdeMond #Ausgabe #Die Entfernung des Mondes zur Erde beträgt 384.400 km. Die Erde ist rund 149.600.000 km von der Sonne entfernt. |
Dabei wird der Integer (Int32) in ein String gewandelt. Zum weiteren rechnen müsste dieser wieder in einen Integer formatiert werden. Für die gewünschte Textausgabe ist dies aber genau richtig.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#Setzten des Wertes AbstandErdeSonne $AbstandErdeSonne = 149600000 $AbstandErdeSonne.GetType() #Ausgabe IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Int32 System.ValueType ################### #Formatieren des Integer $AbstandErdeSonne = "{0:N0}" -f $AbstandErdeSonne $AbstandErdeSonne.GetType() #Ausgabe IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object |
Was was geschieht in den geschweiften Klammern?
In den geschweiften Klammer wird die Notation der der Variable festgelegt. Diese besteht aus drei Teilen.
{0:N0}
- Der Null vor dem Doppelpunkt. Dies ist der Index. Für unsere Beispiele bleibt dieser auf Null gesetzt
- Dem N. Dies ist das Spezifikationssymbol und weist auf Nummerische Werte hin. Es sind weiter möglich.
- Die letzte Null. Diese bestimmt die Genauigkeit nach dem Komma (precision specifier). {0:N2} zeigt nach dem Komma 2 Stellen an.
Ich möchte nun noch die weiteren Formatierungsmöglichkeiten genauer aufzeigen, dazu dient die folgende Tabelle zur Übersicht.
Name | Spezifikationssymbol (Specifier) | |
Nummerisch (Numeric) |
N | |
Währung (Currency) |
C | |
Dezimal, Gleitkommazahl (Decimal) |
D | |
Prozentsatz (Percentage) |
P | |
Hexadezimal (Hexadecimal) |
X |
Beispiele zur Formatierung
Für Formatierung in eine Währung (C) bietet es sich an die Genauigkeit auf 2 zu setzen. Der Wert für die Prozentrechnung (P) wird mit 100 multipliziert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$foo = 999 "{0:N2}" -f $foo "{0:D8}" -f $foo "{0:C2}" -f $foo "{0:P0}" -f $foo "{0:X0}" -f $foo #Ausgabe 999,00 00000999 999,00 € 99.900% 3E7 |
Weiterführende Beispiele gibt es hier: https://technet.microsoft.com/en-us/library/ee692795.aspx (englisch).
rewe
„Der Parameter –f gibt an welche Variable formatiert werden soll. Leider können nicht mehrere Werte hintereinander gesetzt werden wie im folgendem Beispiel.“
Natürlich geht das – es muss nur der Index angepasst werden. Also beim zweiten Eintrag nicht {0…, sondern {1…}