Im letzten Blogeintrag haben wir uns eine .NET Methode zum Formatieren und Runden von Werten angeschaut.
In diesem Blogeintrag schauen wir uns an, wie man mit der mathematischen .NET Bibliothek Zahlen manipulieren kann.
Hier ist das Beispiel aus dem letzten Blogeintrag:
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
Das Ergebnis war zumindest für mich überraschend – das hatte ich in der Schule anders gelernt: Ab ,5 wird immer aufgerundet. Zum Glück konnte mir in einem Workshop ein Kunde das Ergebnis erklären. In der Finanzwelt wird bei ,5 bei geraden Zahlen abgerundet und bei ungeraden Zahlen aufgerundet (bankers rounding). Dadurch entstehen statistisch keine positiven Rundungseffekte für Banken.
Um ein kaufmännisches Runden (so wie man es in der Schule lernt) zu erzwingen, muss ich noch zwei weitere Parameter mitgeben
PS C:\> [math]::round(3.5,0,1)
4
PS C:\> [math]::round(4.5,0,1)
5
PS C:\> [math]::round(3.5,0,1) 4 PS C:\> [math]::round(4.5,0,1) 5
Weitere Rundungsbefehle sind ceiling und floor. Wie der englische Name schon verrät, wird bei ceiling immer zur nächsten vollen Zahl aufgerundet und bei floor zur nächsten vollen Zahl abgerundet.
PS C:\> [math]::Ceiling(4.0001)
5
PS C:\> [math]::Floor(4.9999)
4
PS C:\> [math]::Ceiling(4.0001) 5 PS C:\> [math]::Floor(4.9999) 4
Alle bestehenden mathematischen .NET Methoden kann ich mir folgendermaßen anzeigen lassen. Mit dem –unique erreiche ich, dass keine Dubletten vorkommen:
[math].GetMethods() | Select Name -Unique | Sort-Object
C:\> [math].GetMethods() | Select Name -Unique | Sort-Object Name ---- IEEERemainder Abs Max Pow Log Log10 Exp Min Equals GetHashCode GetType ToString Sign BigMul DivRem Ceiling Cos Cosh Atan2 Acos Asin Atan Floor Round Truncate Sqrt Tanh Sin Tan Sinh
Wir sehen, dass es viele weitere, bekannte mathematische Befehle gibt.
Eine kleine Anekdote
Wenn man eine zu große Zahl provoziert, gibt es je nach PowerShell Version und Sprache verschiedene Ausgaben für den Wert unendlich. Zeigen kann man dies mit der Exponentialzahl von 1000.
Deutsche PowerShell 2
PS C:\> [math]::exp(1000)
+unendlich
Englische PowerShell 2
PS C:\> [math]::exp(1000)
Infinity
Deutsche und englische PowerShell 3 oder größer
PS C:\> [math]::exp(1000)
∞
PS C:\> [math]::exp(1000) ∞
Im nächsten Blogeintrag schauen wir uns Zufallszahlen an.
Was denken Sie?