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.