Die Währung in der PowerShell

Im letzten Blogeintrag haben wir uns angeschaut, wie Dezimalzahlen auf deutschen und englischen Servern behandelt werden.

In diesem Blogeintrag schauen wir uns an, wie man mit Währungssymbolen und den regionalen Besonderheiten arbeiten kann.

Nachdem wir im letzten Blogeintrag gelernt haben, mit Get-Culture das Dezimaltrennzeichen zu finden, vergleichen wir in diesem Beitrag gleich am Anfang die Unterschiede

Mit dem PowerShell Befehl

(Get-Culture).NumberFormat | FL Currency*

kann ich mir alle Formatierungsregeln zum Thema Währungen ausgeben lassen

Deutscher Server US-Englischer Server
CurrencyDecimalDigits 2 2
CurrencyDecimalSeparator , .
CurrencyGroupSizes {3} {3}
CurrencyGroupSeparator . ,
CurrencySymbol $
CurrencyNegativePattern 8 0
CurrencyPositivePattern 3 0

 

Deutscher Server:

 

US-Englischer Server:

Hier sehen wir deutliche Unterschiede in den Definitionen.

Ein praktisches Beispiel: Wir wollen die negative Zahl 12345,67 in das Währungsformat umwandeln. Dafür können wir die String-Methode nutzen, mit der wir auch schon in einem früheren Blogeintrag das Datum umgewandelt haben.

Deutscher Server:

PS C:\> $wert = -12345.67

PS C:\> $wert

-12345,67

PS C:\> $wert.ToString("c")

-12.345,67 €

PS C:\> $wert = -12345.67
PS C:\> $wert
-12345,67
PS C:\> $wert.ToString("c")
-12.345,67 €

Alles wie erwartet: Der Wert ist negativ und hat deswegen ein Minus am Anfang, der Tausender-Block wird mit Punkt getrennt, der Nachkommateil mit einen Komma getrennt und am Ende steht das Euro-Symbol.

 

US-Englischer Server:

PS C:\> $wert = -12345.67

PS C:\> $wert

-12345.67

PS C:\> $wert.ToString("c")

($12,345.67)

PS C:\> $wert = -12345.67
PS C:\> $wert
-12345.67
PS C:\> $wert.ToString("c")
($12,345.67)

Hier ist alles anders. Der negative Währungswert wird durch die Klammern dargestellt, der Tausender-Block mit Komma getrennt, der Nachkommateil mit Punkt und das Dollar-Symbol stehen am Anfang.

 

Power Tipp: Um auf einem beliebigen Server eine Währungsausgabe einer anderen Währung zu erzeugen, kann ich mithilfe eines Culture-Objekts erreichen. Als Beispiel wollen wir unseren Wert von vorhin in tschechische Kronen ausgeben

PS C:\> $wert = -12345.67

PS C:\> $culture = New-Object System.Globalization.CultureInfo("cs-CZ")

PS C:\> $wert.ToString("c",$culture)

-12 345,67 Kč

PS C:\> $wert = -12345.67
PS C:\> $culture = New-Object System.Globalization.CultureInfo("cs-CZ")
PS C:\> $wert.ToString("c",$culture)
-12 345,67 Kč

 

Eine andere Möglichkeit, um Währungen darzustellen ist die Nutzung einer .NET Formatierungsmethode.

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 €

Diese Methode wird meistens zum Runden mit einer festen Anzahl an Nachkommastellen genutzt und damit beschäftigen wir uns im nächsten Blogeintrag.

 

Was denken Sie?

Pflichtfelder sind mit einem * markiert.