Powershell a čísla

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