Rechnen mit Dezimalzahlen in der PowerShell

Im letzten Blogeintrag haben wir uns angeschaut, wie man einen ganzen Monat zeitlich erfassen kann. Vom ersten Tag dieses Monats 0:00 Uhr bis zum letzten Tag des Monats 23:59 Uhr.

In diesem Blogeintrag schauen wir uns an, wie man mit Dezimalzahlen rechnen kann und die Besonderheiten auf deutschsprachigen Servern

Mit der PowerShell kann ich wie mit einem Taschenrechner rechnen:

8+5 ergibt 13 und 26/2 ergibt 13.

Die PowerShell folgt auch der Punkt-vor-Strich Regel:

19-2*3 ergibt 13

PS C:\> 8+5

13

PS C:\> 26/2

13

PS C:\> 19-2*3

13

PS C:\> 8+5
13
PS C:\> 26/2
13
PS C:\> 19-2*3
13

Bei Dezimalzahlen fangen die sprachlichen Besonderheiten an. Die PowerShell rundet das Ergebnis auf 15 Nachkommastellen. Auf deutschsprachigen Servern besteht die Dezimalzahl aus Vorkommastellen, dem Komma und Nachkommastellen.

PS C:\> 1/3

0,333333333333333

PS C:\> 1/3
0,333333333333333

Anders ist es bei einem englischsprachigen Server. Das Dezimal Trennzeichen ist hier ein Punkt.

PS C:\> 1/3

0.333333333333333

PS C:\> 1/3
0.333333333333333

Weiter auf dem deutschsprachigen Server. Was ergibt 0,3 + 0,3 ?

PS C:\> 0,3 + 0,3

0

3

0

3

PS C:\> 0,3 + 0,3
0
3
0
3

Anders als vielleicht erwartet erkennt die deutsche PowerShell die Dezimalzahlen nicht mit Kommaseparator. Mit der GetType Methode können wir nachschauen, was passiert ist:

PS C:\> (0,3 + 0,3).GetType().name

Object[]

PS C:\> (0,3 + 0,3).GetType().name
Object[]

Die PowerShell hat 2 Objektlisten mit jeweils 2 Werten daraus gemacht und diese 4 Werte untereinander ausgegeben.

Vielleicht helfen Anführungszeichen?

PS C:\> "0,3" + "0,3"

0,30,3

PS C:\> "0,3" + "0,3"
0,30,3

Nein, jetzt ist ein langer String aus den Werten geworden.

PS C:\> ("0,3" + "0,3").GetType().name

String

PS C:\> ("0,3" + "0,3").GetType().name
String

Wenn ich mit Dezimalzahlen rechnen will, muss ich den Punkt als Kommaseparator wählen, auch wenn im Ergebnis wieder das Komma als Separator genommen wird:

PS C:\> 0.3 + 0.3

0,6

PS C:\> 0.3 + 0.3
0,6


Profi Tipp:
Mit dem PowerShell Befehl

(Get-Culture).NumberFormat.NumberDecimalSeparator

kann ich mir das Dezimaltrennzeichen ausgeben lassen.

Deutscher Server:

PS C:\> (Get-Culture).NumberFormat.NumberDecimalSeparator
,

Englischer Server:

PS C:\> (Get-Culture).NumberFormat.NumberDecimalSeparator
.

Wie sagen Administratoren immer gerne: „Mit einem auf Englisch installierten Server wäre das nicht passiert!“

Im nächsten Blogeintrag betrachten wir Zahlen mit Währungssymbol.

Was denken Sie?

Pflichtfelder sind mit einem * markiert.