about_Numeric_Literals
Kurze Beschreibung
In diesem Artikel werden die Syntax und Verwendung numerischer Werte in PowerShell beschrieben.
Lange Beschreibung
Es gibt zwei Arten numerischer Literale: ganze Zahl und real. Beide können Typ- und Multiplikatorsuffixe aufweisen.
Ganzzahlenliterale
Ganzzahlige Literale können in dezimaler oder hexadezimaler Schreibweise geschrieben werden. Hexadezimalliterale werden präfixiert 0x
, um sie von Dezimalzahlen zu unterscheiden.
Ganzzahlige Literale können ein Typsuffix und ein Multiplikatorsuffix aufweisen.
Suffix | Bedeutung |
---|---|
l |
long data type |
kb |
Kibibyte (10241) Multiplizierer |
mb |
Mebibyte (10242) Multiplizierer |
gb |
Gigibyte (10243) Multiplizierer |
tb |
Teribyte (10244) Multiplizierer |
pb |
Petibyte (10245) Multiplizierer |
Der Typ eines ganzzahligen Literals wird durch seinen Wert, das Typsuffix und das numerische Multiplikatorsuffix bestimmt.
Für ein ganzzahliges Literal ohne Typsuffix:
- Wenn der Wert durch typ
[int]
dargestellt werden kann, ist dies der Typ. - Andernfalls kann der Wert durch typ
[long]
dargestellt werden, d. h. dessen Typ. - Andernfalls kann der Wert durch typ
[decimal]
dargestellt werden, d. h. dessen Typ. - Andernfalls wird sie durch Typ
[double]
dargestellt.
Für ein ganzzahliges Literal mit einem Typsuffix:
- Wenn das Typsuffix lautet
u
und der Wert durch typ[int]
dargestellt werden kann, lautet[int]
der Typ . - Wenn das Typsuffix lautet
u
und der Wert durch typ[long]
dargestellt werden kann, lautet[long]
der Typ . - Wenn der Wert durch den angegebenen Typ dargestellt werden kann, ist dies der Typ.
- Andernfalls ist dieses Literal falsch formatiert.
Real-Literale
Reale Literale können nur in dezimaler Schreibweise geschrieben werden. Diese Schreibweise kann Bruchwerte nach einem Dezimalkomma und einer wissenschaftlichen Schreibweise mit exponentiellem Teil enthalten.
Der exponentielle Teil enthält ein 'e' gefolgt von einem optionalen Zeichen (+/-) und einer Zahl, die den Exponenten darstellt. Beispielsweise entspricht der Literalwert dem numerischen Wert 1e2
100.
Echte Literale können ein Typsuffix und ein Multiplikatorsuffix aufweisen.
Suffix | Bedeutung |
---|---|
d |
decimal-Datentyp |
kb |
Kibibyte (10241) Multiplizierer |
mb |
Mebibyte (10242) Multiplizierer |
gb |
Gigibyte (10243) Multiplizierer |
tb |
Teribyte (10244) Multiplizierer |
pb |
Petibyte (10245) Multiplizierer |
Es gibt zwei Arten von Real-Literalen: Double und Dezimal. Diese werden durch das Fehlen bzw. Vorhandensein von Dezimaltypsuffix angegeben. PowerShell unterstützt keine Literaldarstellung eines [float]
Werts. Ein doppeltes reales Literal hat Typ [double]
. Ein dezimales reales Literal hat Typ [decimal]
.
Nachstellende Nullen im Bruchteil eines Dezimal-Real-Literals sind von Bedeutung.
Wenn der Wert der Ziffern des Exponenten-Webparts in einem [double]
realen Literal kleiner als das unterstützte Minimum ist, beträgt der Wert dieses [double]
realen Literals 0. Wenn der Wert der Ziffern eines Exponententeils in einem [decimal]
echten Literal kleiner als das unterstützte Minimum ist, wird dieses Literal falsch formatiert. Wenn der Wert der Ziffern eines Exponententeils in einem [double]
oder [decimal]
echten Literal größer als der maximal unterstützte Wert ist, wird dieses Literal falsch formatiert.
Hinweis
Die Syntax ermöglicht ein doppeltes reales Literal, um ein long-type-Suffix zu haben.
PowerShell behandelt diesen Fall als ganzzahliges Literal, dessen Wert durch Typ [long]
dargestellt wird. Dieses Feature wurde aus Gründen der Abwärtskompatibilität mit früheren Versionen von PowerShell beibehalten. Programmierern wird jedoch davon abgeraten, ganzzahlige Literale dieser Form zu verwenden, da sie den tatsächlichen Wert des Literals leicht verdecken können. Hat z. B. 1.2L
den Wert 1, 1.2345e1L
hat den Wert 12 und 1.2345e-5L
den Wert 0, von denen keine sofort offensichtlich ist.
Numerische Multiplikatoren
Aus Gründen der Einfachheit können ganzzahlige und reale Literale einen numerischen Multiplikator enthalten, der einen satz häufig verwendeter Potenzen von 2 angibt. Der numerische Multiplikator kann in einer beliebigen Kombination aus Groß- oder Kleinbuchstaben geschrieben werden.
Die Multiplikatorsuffixe können in Kombination mit den u
ul
Suffixen und l
Typsuffixen verwendet werden.
Beispiele für Multiplikatoren
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Numerische Zugriffstasten
PowerShell unterstützt die folgenden Zugriffstasten:
Accelerator | Hinweis | Beschreibung |
---|---|---|
[byte] |
Byte (nicht signiert) | |
[sbyte] |
Byte (signiert) | |
[Int16] |
16-Bit-Ganzzahl | |
[UInt16] |
16-Bit-Ganzzahl (nicht signiert) | |
[Int32] |
32-bit integer | |
[int] |
Alias für [int32] |
32-bit integer |
[UInt32] |
32-Bit-Ganzzahl (nicht signiert) | |
[Int64] |
64-Bit-Ganzzahl | |
[long] |
Alias für [int64] |
64-Bit-Ganzzahl |
[UInt64] |
64-Bit-Ganzzahl (nicht signiert) | |
[bigint] |
Siehe BigInteger Struct | |
[single] |
Gleitkomma mit einfacher Genauigkeit | |
[float] |
Alias für [single] |
Gleitkomma mit einfacher Genauigkeit |
[double] |
Gleitkomma mit doppelter Genauigkeit | |
[decimal] |
128-Bit-Gleitkomma |
Arbeiten mit anderen numerischen Typen
Um mit anderen numerischen Typen zu arbeiten, müssen Sie Zugriffstasten verwenden, was nicht ohne probleme ist. Beispielsweise werden hohe ganzzahlige Werte immer als double analysiert, bevor sie in einen anderen Typ umgewandelt werden.
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
Der Wert wird als doppelter Erster analysiert, wobei die Genauigkeit in den höheren Bereichen verloren geht. Um dieses Problem zu vermeiden, geben Sie Werte als Zeichenfolgen ein, und konvertieren Sie sie dann:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
Beispiele
Die folgende Tabelle enthält mehrere Beispiele für numerische Literale und listet deren Typ und Wert auf:
Anzahl | Typ | Wert |
---|---|---|
100 | Int32 | 100 |
100D | Decimal | 100 |
100l | Int64 | 100 |
1e2 | Double | 100 |
1.e2 | Double | 100 |
0x1e2 | Int32 | 482 |
0x1e2L | Int64 | 482 |
0x1e2D | Int32 | 7725 |
482D | Decimal | 482 |
482gb | Int64 | 517543559168 |
0x1e2lgb | Int64 | 517543559168 |
Konvertierung des numerischen Typs
Wenn Zeichenfolgen in Zahlen konvertiert werden, werden zusätzliche Hexadezimalformatindikatoren unterstützt. Diese zusätzlichen Formate werden nicht als Literale erkannt.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
Befehle, die wie numerische Literale aussehen
Jeder Befehl, der wie ein numerisches Literal aussieht, muss mit dem Aufrufoperator () ausgeführt werden,&
andernfalls wird er als eine Zahl des zugeordneten Typs interpretiert.
Zugreifen auf Eigenschaften und Methoden numerischer Objekte
Für den Zugriff auf ein Element eines numerischen Literals gibt es Fälle, in denen Sie das Literal in Klammern einschließen müssen.
- Das Literal weist keinen Dezimalkomma auf.
- Das Literal weist keine Ziffern nach dem Dezimalkomma auf.
- Das Literal hat kein Suffix.
Das folgende Beispiel schlägt z. B. fehl:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Die folgenden Beispiele funktionieren:
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
Die ersten beiden Beispiele funktionieren, ohne den Literalwert in Klammern einzuschließen, da der PowerShell-Parser bestimmen kann, wo das numerische Literal endet und die GetType-Methode beginnt.