Sdílet prostřednictvím


about_Numeric_Literals

Krátký popis

Tento článek popisuje syntaxi a použití číselných hodnot v PowerShellu.

Dlouhý popis

Existují dva druhy číselných literálů: celé číslo a reálné. Oba můžou mít přípony typu a násobitele.

Celočíselné literály

Celočíselné literály lze zapsat v desítkovém nebo šestnáctkovém zápisu. Šestnáctkové literály mají předponu 0x , aby se odlišily od desetinných čísel.

Celočíselné literály můžou mít příponu typu a příponu násobitele.

Přípona Význam
l dlouhý datový typ
kb násobitel kibibajtů (10241)
mb mebibajtů (10242) násobitel
gb násobitel gigibajtů (10243)
tb násobitel teribajtů (10244)
pb násobitel petibajtů (10245)

Typ celočíselného literálu je určen jeho hodnotou, příponou typu a číselnou příponou násobitele.

Pro celočíselnou literál bez přípony typu:

  • Pokud může být hodnota reprezentována typem [int], to je jeho typ.
  • V opačném případě, pokud lze hodnotu reprezentovat podle typu [long], to je jeho typ.
  • V opačném případě, pokud lze hodnotu reprezentovat podle typu [decimal], to je jeho typ.
  • V opačném případě je reprezentován typem [double].

Pro celočíselnou literál s příponou typu:

  • Pokud je u přípona typu a hodnota může být reprezentována typem [int] , je [int]jeho typ .
  • Pokud je u přípona typu a hodnota může být reprezentována typem [long] , je [long]jeho typ .
  • Pokud je její hodnota reprezentována typem zadaným, pak je to jeho typ.
  • Jinak je tento literál poškozený.

Skutečné literály

Skutečné literály lze zapsat pouze v desítkovém zápisu. Tento zápis může obsahovat desetinné hodnoty za desetinnou čárkou a vědecký zápis pomocí exponenciální části.

Exponenciální část obsahuje znak e následovaný volitelným symbolem (+/-) a číslem představujícím exponent. Například hodnota 1e2 literálu se rovná číselné hodnotě 100.

Skutečné literály můžou mít příponu typu a příponu násobitele.

Přípona Význam
d desetinný datový typ
kb násobitel kibibajtů (10241)
mb mebibajtů (10242) násobitel
gb násobitel gigibajtů (10243)
tb násobitel teribajtů (10244)
pb násobitel petibajtů (10245)

Existují dva druhy reálného literálu: double a decimal. Ty jsou označeny absencí nebo přítomností přípony typu desetinné čárky. PowerShell nepodporuje literální reprezentaci [float] hodnoty. Dvojitý skutečný literál má typ [double]. Desetinný skutečný literál má typ [decimal]. Koncové nuly v části zlomku desetinného reálného literálu jsou významné.

Pokud je hodnota číslic exponent-part v reálném literálu [double] menší než minimální podporovaná hodnota, hodnota tohoto [double] reálného literálu je 0. Pokud je hodnota číslic exponent-part v reálném literálu [decimal] menší než minimální podporovaná hodnota, je tento literál poškozený. Pokud je hodnota číslic exponent-part v reálném [double] literálu [decimal] větší než maximální podporovaná hodnota, je tento literál poškozený.

Poznámka:

Syntaxe umožňuje dvojitý skutečný literál mít příponu dlouhého typu. PowerShell považuje tento případ za celočíselnou literál, jehož hodnota je reprezentována typem [long]. Tato funkce byla zachována kvůli zpětné kompatibilitě se staršími verzemi PowerShellu. Programátoři ale nedoporučuje používat celočíselné literály tohoto formuláře, protože mohou snadno zakrýt skutečnou hodnotu literálu. Má například 1.2L hodnotu 1, 1.2345e1L má hodnotu 12 a 1.2345e-5L má hodnotu 0, z níž není okamžitě zřejmé.

Číselné násobitele

Pro usnadnění může celé číslo a reálné literály obsahovat číselný násobitel, který označuje jednu ze sady běžně používaných mocnin 2. Číselný násobitel lze zapsat v libovolné kombinaci velkých nebo malých písmen.

Přípony násobitele lze použít v kombinaci s příponou u, ula l typem přípony.

Příklady násobitele

PS> 1kb
1024

PS> 1.30Dmb
1363148.80

PS> 0x10Gb
17179869184

PS> 1.4e23tb
1.5393162788864E+35

PS> 0x12Lpb
20266198323167232

Akcelerátory číselného typu

PowerShell podporuje následující akcelerátory typů:

Akcelerátor Poznámka: Popis
[byte] Bajt (bez znaménka)
[sbyte] Bajt (podepsaný)
[int16] 16bitové celé číslo
[uint16] 16bitové celé číslo (bez znaménka)
[int32] 32bitové celé číslo
[int] alias pro [int32] 32bitové celé číslo
[uint32] 32bitové celé číslo (bez znaménka)
[int64] 64bitové celé číslo
[long] alias pro [int64] 64bitové celé číslo
[uint64] 64bitové celé číslo (bez znaménka)
[bigint] Viz BigInteger – struktura
[single] Jednoduchá přesnost s plovoucí desetinnou čárkou
[float] alias pro [single] Jednoduchá přesnost s plovoucí desetinnou čárkou
[double] Dvojitá přesnost s plovoucí desetinnou čárkou
[decimal] 128bitová plovoucí čárka

Práce s jinými číselnými typy

Chcete-li pracovat s jinými číselnými typy, musíte použít akcelerátory typů, které nejsou bez problémů. Například vysoké celočíselné hodnoty se před přetypování na jakýkoli jiný typ vždy parsují jako dvojité.

PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904

Hodnota se nejprve analyzuje jako dvojitá, při ztrátě přesnosti ve vyšších rozsazích. Chcete-li se tomuto problému vyhnout, zadejte hodnoty jako řetězce a pak je převeďte:

PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111

Examples

Následující tabulka obsahuje několik příkladů číselných literálů a uvádí jejich typ a hodnotu:

Počet Typ Hodnota
100 Int32 100
100D Desetinné číslo 100
100l Int64 100
1e2 Hodnota s dvojitou přesností 100
1.e2 Hodnota s dvojitou přesností 100
0x1e2 Int32 482
0x1e2L Int64 482
0x1e2D Int32 7725
482D Desetinné číslo 482
482gb Int64 517543559168
0x1e2lgb Int64 517543559168

Převod číselného typu

Při převodu řetězců na čísla se podporují další šestnáctkové indikátory formátu. Tyto další formáty se nerozpoznají jako literály.

[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF

Příkazy, které vypadají jako číselné literály

Každý příkaz, který vypadá jako číselný literál, musí být proveden pomocí operátoru volání (&), jinak se interpretuje jako číslo přidruženého typu.

Přístup k vlastnostem a metodám číselných objektů

Pokud chcete získat přístup k členu číselného literálu, existují případy, kdy potřebujete literál uzavřít do závorek.

  • Literál nemá desetinnou čárku.
  • Literál neobsahuje žádné číslice za desetinnou čárkou.
  • Literál nemá příponu.

Například následující příklad selže:

PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+           ~
An expression was expected after '('.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression

Následující příklady fungují:

PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32

První dva příklady fungují bez uzavření hodnoty literálu do závorek, protože analyzátor PowerShellu může určit, kde číselný literál končí a metoda GetType začíná.