Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Ez a cikk a PowerShell numerikus értékeinek szintaxisát és használatát ismerteti.
Hosszú leírás
Kétféle numerikus literál létezik: egész szám és valós. Mindkettő típus- és szorzó-utótagokkal rendelkezhet.
Egész számkonstansok
Az egész szám literálok decimális, hexadecimális vagy bináris jelölésben írhatók.
A hexadecimális literálok előtaggal 0x és bináris literálokkal vannak előtagolva 0b , így megkülönböztethetők a tizedes törtektől.
Az egész számkonstansok típus-utótagokkal és szorzó utótagokkal is rendelkezhetnek.
| Toldalék | Értelmezés | Feljegyzés |
|---|---|---|
y |
aláírt bájt adattípus | Hozzáadva a PowerShell 6.2-ben |
uy |
aláíratlan bájt adattípus | Hozzáadva a PowerShell 6.2-ben |
s |
rövid adattípus | Hozzáadva a PowerShell 6.2-ben |
us |
aláíratlan rövid adattípus | Hozzáadva a PowerShell 6.2-ben |
l |
hosszú adattípus | |
u |
aláíratlan int vagy long adattípus | Hozzáadva a PowerShell 6.2-ben |
ul |
aláíratlan hosszú adattípus | Hozzáadva a PowerShell 6.2-ben |
n |
BigInteger adattípus | Hozzáadva a PowerShell 7.0-hoz |
kb |
kibibyte (10241) szorzó | |
mb |
mebibyte (10242) szorzó | |
gb |
gigibyte (10243) szorzó | |
tb |
teribyte (10244) szorzó | |
pb |
petibyte (10245) szorzó |
Az egész számkonstans típusát az értéke, a típus utótagja és a numerikus szorzó utótagja határozza meg.
Típus utótag nélküli egész számkonstans esetén:
- Ha az érték típus
[int]szerint jeleníthető meg, akkor ez a típusa. - Ellenkező esetben, ha az érték típus
[long]szerint ábrázolható, akkor ez a típusa. - Ellenkező esetben, ha az érték típus
[decimal]szerint ábrázolható, akkor ez a típusa. - Ellenkező esetben típus szerint van jelölve
[double].
Egész szám típusú utótaggal rendelkező literál esetén:
- Ha a típus utótagja,
ués az érték típus[uint]szerint ábrázolható, akkor a típusa .[uint] - Ha a típus utótagja,
ués az érték típus[ulong]szerint ábrázolható, akkor a típusa .[ulong] - Ha az érték a megadott típus szerint ábrázolható, akkor ez a típusa.
- Ellenkező esetben a literál helytelenül van formázva.
Valós literálok
A valódi literálok csak decimális jelölésben írhatók. Ez a jelölés a tizedesvesszőt követő törtértékeket és az exponenciális részt használó tudományos jelöléseket is tartalmazhat.
Az exponenciális rész tartalmaz egy "e"-t, amelyet egy választható jel (+/-) és egy szám követ, amely a kitevőt jelöli. A literális érték 1e2 például a 100-nak felel meg.
A valódi literálok típus-utótagokkal és szorzó utótagokkal is rendelkezhetnek.
| Toldalék | Értelmezés |
|---|---|
d |
decimális adattípus |
kb |
kibibyte (10241) szorzó |
mb |
mebibyte (10242) szorzó |
gb |
gigibyte (10243) szorzó |
tb |
teribyte (10244) szorzó |
pb |
petibyte (10245) szorzó |
Kétféle valódi literál létezik: dupla és decimális. Ezeket a tizedes típusú utótag hiánya vagy jelenléte jelzi. A PowerShell nem támogatja az [float] értékek literális ábrázolását. A dupla valós literál típusa [double]. A decimális valódi literál típusa [decimal].
A decimális valós literál törtrészében lévő záró nullák jelentősek.
Ha az exponent-part számjegyeinek értéke egy [double] valós literálban kisebb, mint a minimálisan támogatott érték, akkor a valódi literál értéke [double] 0. Ha az exponent-part számjegyeinek értéke egy [decimal] valós literálban kisebb, mint a minimális támogatott érték, akkor ez a literál helytelenül van formázva. Ha a kitevő-rész számjegyeinek értéke egy [double] vagy [decimal] valós literálban nagyobb, mint a maximális támogatott érték, akkor ez a literál helytelenül van formázva.
Feljegyzés
A szintaxis lehetővé teszi, hogy egy dupla valós literál hosszú típusú utótagot adjon meg.
A PowerShell ezt az esetet egész számkonstansként kezeli, amelynek értékét típus [long]jelöli. Ezt a funkciót megőrizték a PowerShell korábbi verzióival való visszamenőleges kompatibilitás érdekében. A programozók azonban nem tudják használni az űrlap egész számkonstansait, mivel könnyen elfedhetik a literál tényleges értékét. Például 1.2L az 1 értéket, 1.2345e1L a 12 értéket, és 1.2345e-5L a 0 értéket, amelyek közül egyik sem azonnal nyilvánvaló.
Numerikus szorzók
A kényelem érdekében az egész szám és a valós literálok tartalmazhatnak numerikus szorzót, amely a 2 gyakran használt hatványok egyikét jelzi. A numerikus szorzó nagybetűk vagy kisbetűk tetszőleges kombinációjában írható.
A szorzó utótagok bármilyen típus-utótaggal együtt használhatók, de a típus utótagja után jelen kell lenniük. A literál 100gbL például helytelenül formázott, de a literál 100Lgb érvényes.
Ha egy szorzó olyan értéket hoz létre, amely meghaladja az utótag által megadott numerikus típus lehetséges értékeit, a literál hibásan formázott lesz. A literál 1usgb például hibásan formázott, mert az érték 1gb nagyobb, mint az utótag által [ushort] megadott típus esetében us megengedett érték.
Példák szorzókra
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Numerikus típusú gyorsítók
A PowerShell a következő típusgyorsítókat támogatja:
| Gázpedál | Feljegyzés | Leírás |
|---|---|---|
[byte] |
Bájt (aláíratlan) | |
[sbyte] |
Bájt (aláírt) | |
[int16] |
16 bites egész szám | |
[short] |
alias a következőhöz: [int16] |
16 bites egész szám |
[uint16] |
16 bites egész szám (aláíratlan) | |
[ushort] |
alias a következőhöz: [uint16] |
16 bites egész szám (aláíratlan) |
[int32] |
32 bites egész szám | |
[int] |
alias a következőhöz: [int32] |
32 bites egész szám |
[uint32] |
32 bites egész szám (aláíratlan) | |
[uint] |
alias a következőhöz: [uint32] |
32 bites egész szám (aláíratlan) |
[int64] |
64 bites egész szám | |
[long] |
alias a következőhöz: [int64] |
64 bites egész szám |
[uint64] |
64 bites egész szám (aláíratlan) | |
[ulong] |
alias a következőhöz: [uint64] |
64 bites egész szám (aláíratlan) |
[bigint] |
Lásd: BigInteger Struct | |
[single] |
Egyetlen pontosságú lebegőpontos | |
[float] |
alias a következőhöz: [single] |
Egyetlen pontosságú lebegőpontos |
[double] |
Dupla pontosságú lebegőpontos | |
[decimal] |
128 bites lebegőpontos |
Feljegyzés
A Következő típusgyorsítók lettek hozzáadva a PowerShell 6.2-ben: [short], [ushort], , [uint][ulong].
Példák
Az alábbi táblázat számos példát tartalmaz a numerikus literálokra, és felsorolja azok típusát és értékét:
| Szám | Típus | Érték |
|---|---|---|
| 100 | Int32 | 100 |
| 100u | UInt32 | 100 |
| 100D | Decimális | 100 |
| 100l | Int64 | 100 |
| 100uL | UInt64 | 100 |
| 100us | UInt16 | 100 |
| 100uy | Bájt | 100 |
| 100y | SByte | 100 |
| 1e2 | Kétszeres | 100 |
| 1.e2 | Kétszeres | 100 |
| 0x1e2 | Int32 | 482 |
| 0x1e2L | Int64 | 482 |
| 0x1e2D | Int32 | 7725 |
| 482D | Decimális | 482 |
| 482gb | Int64 | 517543559168 |
| 482ngb | BigInteger | 517543559168 |
| 0x1e2lgb | Int64 | 517543559168 |
| 0b1011011 | Int32 | 91 |
| 0xFFFFs | Int16 | 1- |
| 0xFFFFFFFF | Int32 | 1- |
| -0xFFFFFFFF | Int32 | 0 |
| 0xFFFFFFFFu | UInt32 | 4294967295 |
Bináris vagy hexadecimális számok használata
A túl nagy bináris vagy hexadecimális literálok ahelyett, [bigint] hogy az elemzést meghiúsulnák, ha és csak akkor, ha az n utótag meg van adva. A jelbitek továbbra is a páros [decimal] tartományok felett vannak tiszteletben tartva, azonban:
- Ha egy bináris sztring 8 bites többszöröse, a legnagyobb bitet a jelbitként kezeli a függvény.
- Ha egy 8-as többszörös hosszúságú hexa sztring első számjegye 8 vagy annál magasabb, a szám negatívként lesz kezelve.
A bináris és a hexa literálok alá nem írt utótagjának megadása figyelmen kívül hagyja a jelbiteket. Visszaadja például a 0xFFFFFFFF-10xFFFFFFFFu[uint]::MaxValue 4294967295 értékét.
A PowerShell 7.1-ben a hexa-literál típus-utótagja mostantól egy ilyen típusú aláírt értéket ad vissza. A PowerShell 7.0-ban például a kifejezés 0xFFFFs hibát ad vissza, mert a pozitív érték túl nagy egy [int16] típushoz.
A PowerShell 7.1 ezt egy típusként -1[int16] értelmezi.
A konstans 0 előtagja ezt megkerüli, és aláíratlanként lesz kezelve.
Például: 0b011111111 Erre akkor lehet szükség, ha a [bigint] tartományban lévő literálokkal dolgozik, mivel az és u az n utótagok nem kombinálhatók.
Az előtaggal - bináris és hexa literálokat is tagadhat. Ez pozitív számot eredményezhet, mivel a jelbitek engedélyezettek.
A BigInteger-utótagú számokhoz a rendszer aláírási biteket fogad el:
- A BigInteger utótagú hexa minden literál nagy bitjét 8 karakter hosszúságú jelbitként kezeli. A hossz nem tartalmazza az
0xelőtagot vagy az utótagokat. - A BigInteger utótagú bináris 96 és 128 karakternél, utána pedig 8 karakterenként fogadja el a jelbiteket.
Numerikus típus konvertálása
Ha a sztringeket számokká konvertálja, további hexadecimális formátumjelzők támogatottak. Ezeket a további formátumokat a rendszer nem ismeri fel literálként.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
[int] '0b1111' -eq 0b1111
[int] '0b1111' -eq 15
Numerikus literálokhoz hasonló parancsok
Az érvényes számkonstansnak tűnő parancsokat a hívó operátorral (&) kell végrehajtani, ellenkező esetben számként kell értelmezni. Az érvényes szintaxissal 1usgb rendelkező hibásan formázott literálok a következő hibát eredményezik:
PS> 1usgb
At line:1 char:6
+ 1usgb
+ ~
The numeric constant 1usgb is not valid.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
Az érvénytelen szintaxisú 1gbus hibásan formázott literálok azonban szabványos, csupasz sztringként lesznek értelmezve, és érvényes parancsnévként értelmezhetők olyan környezetekben, ahol parancsok hívhatók meg.
Numerikus objektumok hozzáférési tulajdonságai és metódusai
A numerikus literál egy tagjának eléréséhez vannak olyan esetek, amikor zárójelbe kell helyeznie a literálist.
- A literál nem rendelkezik tizedesvesszővel
- A literál nem tartalmaz számjegyeket a tizedesvessző után
- A literálnak nincs utótagja
A következő példa például meghiúsul:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
A következő példák működnek:
PS> 2uL.GetType().Name
UInt64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
Az első két példa a konstans érték zárójelbe helyezése nélkül működik, mivel a PowerShell-elemző meg tudja határozni, hogy hol végződik a számkonstans, és hol kezdődik a GetType metódus.
Numerikus literálok elemzése a PowerShellben
A PowerShell 7.0-s verzióban módosította a numerikus literálok elemzésének módját az új funkciók engedélyezéséhez.
Valós numerikus literálok elemzése
Ha a literál tizedesvesszőt vagy e-jelölést tartalmaz, a literális sztring valós számként lesz elemezve.
- Ha a decimális utótag jelen van, akkor közvetlenül a következőbe:
[decimal]. - Máskülönben elemezni kell a szorzót
[double], és szorzót kell alkalmazni az értékre. Ezután ellenőrizze a típus utótagokat, és próbálkozzon a megfelelő típusba való beírással. - Ha a sztring nem tartalmaz típus-utótagot, akkor elemezni kell a következőt
[double]: .
Egész számkonstansok elemzése
Az egész szám típusú literálok elemzése a következő lépésekkel történik:
- A radix formátumának meghatározása
- Bináris formátumok esetén elemezd a következőt
[bigint]: . - Hexadecimális formátumok esetén speciális
[bigint]eseteket használva őrizze meg az eredeti viselkedést, ha az érték a[int]tartományban van[long]. - Ha sem bináris, sem hexa nem, akkor általában elemezni kell a
[bigint].
- Bináris formátumok esetén elemezd a következőt
- Alkalmazza a szorzóértéket, mielőtt bármilyen öntöttel próbálkozik, hogy a típushatárok megfelelően ellenőrizhetők legyenek túlcsordulások nélkül.
- Ellenőrizze a típus utótagját.
- Ellenőrizze a típushatárokat, és próbálja meg elemezni ezt a típust.
- Ha nem használ utótagot, akkor az érték a következő sorrendben van bejelölve, így az első sikeres teszt határozza meg a szám típusát.
[int][long]-
[decimal](csak alap-10 literál) -
[double](csak alap-10 literál)
- Ha az érték kívül esik a
[long]hexa és a bináris számok tartományán, az elemzés meghiúsul. - Ha az érték a 10-es alapérték tartományán kívül
[double]esik, az elemzés sikertelen lesz. - A magasabb értékeket explicit módon kell írni az utótag használatával a
nliterálBigIntegerelemzéséhez.
Nagy értékű literálok elemzése
Korábban a magasabb egész számértékeket dupla értékként elemeztük, mielőtt bármilyen más típusba öntötték volna őket. Ez a pontosság csökkenését eredményezi a magasabb tartományokban. Példa:
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
A probléma elkerülése érdekében sztringekként kellett írnia az értékeket, majd konvertálnia kell őket:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
A PowerShell 7.0-ban az N utótagot kell használnia.
PS> 111111111111111111111111111111111111111111111111111111n
111111111111111111111111111111111111111111111111111111
A pontosság fenntartása érdekében a decimális utótagot [ulong]::MaxValue használva is meg kell jelölni az értékeket.[decimal]::MaxValueD Az utótag nélkül ezek az értékek valós elemzési módként lesznek elemezve [double] .