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?