about_Numeric_Literals
Kort beskrivning
Den här artikeln beskriver syntaxen och användningen av numeriska värden i PowerShell.
Lång beskrivning
Det finns två typer av numeriska literaler: heltal och verkliga. Båda kan ha suffix för typ och multiplikator.
Heltalsliteraler
Heltalsliteraler kan skrivas i decimal- eller hexadecimal notation. Hexadecimala literaler prefix med 0x
för att skilja dem från decimaltal.
Heltalsliteraler kan ha ett typsuffix och ett multiplikatorsuffix.
Suffix | Innebörd |
---|---|
l |
lång datatyp |
kb |
kilobytesmultiplikator |
mb |
megabyte multiplikator |
gb |
gigabytemultiplikator |
tb |
terabytemultiplikator |
Pb |
petabyte-multiplikator |
Typen av en heltalsliteral bestäms av dess värde, typsuffixet och det numeriska multiplikatorsuffixet.
För en heltalsliteral utan typsuffix:
- Om värdet kan representeras av typen
[int]
är det dess typ. - Annars, om värdet kan representeras av typen
[long]
, är det dess typ. - Annars, om värdet kan representeras av typen
[decimal]
, är det dess typ. - Annars representeras den av typen
[double]
.
För en heltalsliteral med ett typsuffix:
- Om typsuffixet är
u
och värdet kan representeras av typen[int]
är[int]
dess typ . - Om typsuffixet är
u
och värdet kan representeras av typen[long]
är[long]
dess typ . - Om dess värde kan representeras av den angivna typen är det dess typ.
- Annars är den literalen felaktigt formaterad.
Verkliga literaler
Verkliga literaler kan bara skrivas i decimal notation. Den här notationen kan innehålla bråkvärden som följer en decimalpunkt och en vetenskaplig notation med hjälp av en exponentiell del.
Den exponentiella delen innehåller ett "e" följt av ett valfritt tecken (+/-) och ett tal som representerar exponenten. Till exempel är literalvärdet 1e2
lika med det numeriska värdet 100.
Verkliga literaler kan ha ett typsuffix och ett multiplikatorsuffix.
Suffix | Innebörd |
---|---|
d |
decimaldatatyp |
kb |
kilobytesmultiplikator |
mb |
megabyte multiplikator |
gb |
gigabytemultiplikator |
tb |
terabytemultiplikator |
pb |
petabyte-multiplikator |
Det finns två typer av verklig literal: dubbel och decimal. Dessa indikeras av frånvaro eller närvaro av decimal-typ suffix. PowerShell stöder inte en literal representation av ett [float]
värde. En dubbel verklig literal har typen [double]
. En verklig decimalliteral har typen [decimal]
.
Avslutande nollor i bråkdelen av en verklig decimalliteral är betydande.
Om värdet för exponentdelens siffror i en [double]
verklig literal är mindre än det minsta som stöds är värdet för den [double]
verkliga literalen 0. Om värdet för exponentdelens siffror i en [decimal]
verklig literal är mindre än det minsta som stöds är den literalen felaktigt formaterad. Om värdet för exponentdelens siffror i en [double]
eller [decimal]
verklig literal är större än det maximala som stöds är den literalen felaktigt formaterad.
Kommentar
Syntaxen tillåter att en dubbel verklig literal har ett suffix av lång typ.
PowerShell behandlar det här fallet som en heltalsliteral vars värde representeras av typen [long]
. Den här funktionen har bevarats för bakåtkompatibilitet med tidigare versioner av PowerShell. Programmerare avråder dock från att använda heltal i det här formuläret eftersom de enkelt kan dölja literalens faktiska värde. Till exempel 1.2L
har värdet 1, 1.2345e1L
har värdet 12 och 1.2345e-5L
har värdet 0, varav inget är omedelbart uppenbart.
Numeriska multiplikatorer
För enkelhetens skull kan heltal och verkliga literaler innehålla en numerisk multiplikator, vilket indikerar en av en uppsättning vanliga krafter på 2. Den numeriska multiplikatorn kan skrivas i valfri kombination av versaler eller gemener.
Multiplikatorsuffixen kan användas i kombination med suffixen u
, ul
och l
typ.
Multiplikatorexempel
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Acceleratorer av numerisk typ
PowerShell stöder följande typacceleratorer:
Accelerator | Kommentar | beskrivning |
---|---|---|
[byte] |
Byte (osignerad) | |
[sbyte] |
Byte (signerad) | |
[Int16] |
16-bitars heltal | |
[UInt16] |
16-bitars heltal (osignerat) | |
[Int32] |
32-bitars heltal | |
[int] |
alias för [int32] |
32-bitars heltal |
[UInt32] |
32-bitars heltal (osignerat) | |
[Int64] |
64-bitars heltal | |
[long] |
alias för [int64] |
64-bitars heltal |
[UInt64] |
64-bitars heltal (osignerat) | |
[bigint] |
Se BigInteger Struct | |
[single] |
Flyttal med enkel precision | |
[float] |
alias för [single] |
Flyttal med enkel precision |
[double] |
Flyttal med dubbel precision | |
[decimal] |
128-bitars flyttals |
Arbeta med andra numeriska typer
Om du vill arbeta med andra numeriska typer måste du använda typacceleratorer, vilket inte är utan några problem. Till exempel parsas höga heltalsvärden alltid som dubbla innan de omvandlas till någon annan typ.
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
Värdet parsas som en dubbel först och förlorar precision i de högre intervallen. Undvik det här problemet genom att ange värden som strängar och sedan konvertera dem:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
Exempel
Följande tabell innehåller flera exempel på numeriska literaler och visar deras typ och värde:
Antal | Type | Värde |
---|---|---|
100 | Int32 | 100 |
100D | Decimal | 100 |
100l | Int64 | 100 |
1e2 | Dubbel | 100 |
1.e2 | Dubbel | 100 |
0x1e2 | Int32 | 482 |
0x1e2L | Int64 | 482 |
0x1e2D | Int32 | 7725 |
482D | Decimal | 482 |
482gb | Int64 | 517543559168 |
0x1e2lgb | Int64 | 517543559168 |
Konvertering av numerisk typ
När strängar konverteras till tal stöds ytterligare hexadecimala formatindikatorer. Dessa ytterligare format identifieras inte som literaler.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
Kommandon som ser ut som numeriska literaler
Alla kommandon som ser ut som en numerisk literal måste köras med hjälp av anropsoperatorn (&
), annars tolkas det som ett antal av den associerade typen.
Åtkomstegenskaper och metoder för numeriska objekt
För att få åtkomst till en medlem i en numerisk literal finns det fall då du behöver omsluta literalen inom parenteser.
- Literalen har ingen decimalpunkt
- Literalen har inga siffror som följer decimaltecknet
- Literalen har inget suffix
Följande exempel misslyckas till exempel:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Följande exempel fungerar:
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
De första två exemplen fungerar utan att omsluta literalvärdet i parenteser eftersom PowerShell-parsern kan avgöra var den numeriska literalen slutar och GetType-metoden startar.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för