zaokrąglanie liczb (PowerShell)

liczby można zaokrąglić/sformatować na kilka sposobów.

można np. 'rzutować typ’ [casting] przez co liczba zostanie odpowiednio sformatowana. np. interesuje nas liczba całkowita z działania:

PS C:\_scriptZ> 1/3
0,333333333333333
PS C:\_scriptZ> [int](1/3)
0

można też bawić się formatowaniem ciągu znaków [string] co jest zwłaszcza przydatne jeśli potrzebujemy dopełnienia – np. dopełnienie z przodu do trzech cyfr – 001, 010, 100:

PS C:\_scriptZ> 1..100|%{$_.toString("000")}
001
002
[...]
092
093
[...]
099
100

zaokrąglenie liczby do konkretnej ilości po przecinq – albo jak wyżej, poprzez konwersję string…

PS C:\_scriptZ> (1/3).toString("##.#")
,3
PS C:\_scriptZ> (1/3).toString("#.###")
,333
PS C:\_scriptZ> (1/3).toString("0.###")
0,333
PS C:\_scriptZ> (44/3).toString("0.###")
14,667

…albo przez funkcje matematyczne. te dają trochę większą kontrolę.

PS C:\_scriptZ> [math]::round((1/3))
0
PS C:\_scriptZ> [math]::round((2/3))
1
PS C:\_scriptZ> [math]::round((2/3),3)
0,667

przy obu działaniach trzeba mieć pewność na jakim typie danych się operuje, więc można je stosować zależnie.

…a cały wpis zainspirowany był poszukaniem sensownej metody na wyciągnięcie części całkowitej ułamka, ale nie zaokrąglaniu. wszystkie testowane funkcje – czy round, czy cast czy format string – zaokrąglają automatycznie. czyli 0,6 = 1. a ja potrzebuję zera z przodu. i tutaj klasa matematyczna sprawdza się najlepiej [podłoga z dołu i sufit z góry (; ]:

PS C:\_scriptZ> [math]::floor(2/3)
0
PS C:\_scriptZ> [math]::floor(1/3)
0
PS C:\_scriptZ> [math]::ceiling(1/3)
1
PS C:\_scriptZ> [math]::ceiling(2/3)
1

eN.