Freigeben über


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 uulSuffixen 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.