Mathematische .NET Methoden in der PowerShell

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

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

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

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

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)

 

Im nächsten Blogeintrag schauen wir uns Zufallszahlen an.

Was denken Sie?