Důležité poznatky pro práci s čísly:
- V Powershellu při zadávání desetinných čísel musíte zadat desetinnou tečku místo desetinné čárky (english formát).
- Každou proměnnou deklarujte v rozsahu jejího datového typu – aspoň já to tak dělám, je to dobrý zvyk z programování. Tyto číselné datové typy jsou: decimal, int, int32, int16, uint16, int64, uint64, long, ulong, single, double, float, byte, sbyte.
Deklarace
Explicitní deklarace:
PS C:\WINDOWS\system32> [double]$c=256.456 PS C:\WINDOWS\system32> $c.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Double System.ValueType
Také existuje implicitní deklarace při použití proměnné:
PS C:\WINDOWS\system32> $f=12568 PS C:\WINDOWS\system32> $f.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Int32 System.ValueType PS C:\WINDOWS\system32> $g=1526.879 PS C:\WINDOWS\system32> $g.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Double System.ValueType
Konverze
V Powershellu existuje automatická konverze mezi číselnými datovými typy, přitom ale nedochází ke změně datového typu původní proměnné! Samozřejmě nemůžete konvertovat na číselný typ, který má menší rozsah hodnot. Následující příklad vychází z výše uvedené deklarace:
PS C:\WINDOWS\system32> [float]$d 1568,458 PS C:\WINDOWS\system32> [long]$d 1568 PS C:\WINDOWS\system32> [int]$d 1568 PS C:\WINDOWS\system32> [byte]$d Cannot convert value "1568,458" to type "System.Byte". Error: "Pro typ bajt bez znaménka byla hodnota buď příliš velká, nebo příliš malá." At line:1 char:1 + [byte]$d + ~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : InvalidCastIConvertible PS C:\WINDOWS\system32> $d.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Double System.ValueType
Zaokrouhlování
PS C:\WINDOWS\system32> $d 1568,458 PS C:\WINDOWS\system32> [math]::Round($d) 1568 PS C:\WINDOWS\system32> [math]::Round($d,1) 1568,5 PS C:\WINDOWS\system32> [math]::Round($d,2) 1568,46
Formátování
Pokud na výstupu potřebujete čísla zformátovat, pak můžete použít níže uvedený postup, ale tím číslo převedete do Stringu:
PS C:\WINDOWS\system32> (3/9).ToString("P") 33,33 % PS C:\WINDOWS\system32> (125.2568).ToString("###.#") 125,3
A používané formátovací řetězce?