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?
Standard Numeric Format Strings
Custom Numeric Format Strings