Partager via


about_Numeric_Literals

Brève description

Cet article décrit la syntaxe et l’utilisation des valeurs numériques dans PowerShell.

Description longue

Il existe deux types de littéraux numériques : entier et réel. Les deux peuvent avoir des suffixes de type et de multiplicateur.

Littéraux entiers

Les littéraux entiers peuvent être écrits en notation décimale ou hexadécimale. Les littéraux hexadécimaux sont préfixés 0x pour les distinguer des nombres décimaux.

Les littéraux entiers peuvent avoir un suffixe de type et un suffixe multiplicateur.

Suffixe Signification
l type de données long
kb kibibyte (10241) multiplicateur
mb mebibyte (10242) multiplicateur
gb gigibyte (10243) multiplicateur
tb teribyte (10244) multiplicateur
pb petibyte (10245) multiplicateur

Le type d’un littéral entier est déterminé par sa valeur, le suffixe de type et le suffixe multiplicateur numérique.

Pour un littéral entier sans suffixe de type :

  • Si la valeur peut être représentée par type [int], c’est-à-dire son type.
  • Sinon, si la valeur peut être représentée par type [long], c’est-à-dire son type.
  • Sinon, si la valeur peut être représentée par type [decimal], c’est-à-dire son type.
  • Sinon, il est représenté par type [double].

Pour un littéral entier avec un suffixe de type :

  • Si le suffixe de type est u et que la valeur peut être représentée par type, son type [int] est [int].
  • Si le suffixe de type est u et que la valeur peut être représentée par type, son type [long] est [long].
  • Si sa valeur peut être représentée par le type spécifié, il s’agit de son type.
  • Sinon, ce littéral est mal formé.

Littéraux réels

Les littéraux réels ne peuvent être écrits qu’en notation décimale. Cette notation peut inclure des valeurs fractionnaires à la suite d’une notation décimale et scientifique à l’aide d’une partie exponentielle.

La partie exponentielle inclut un « e » suivi d’un signe facultatif (+/-) et d’un nombre représentant l’exposant. Par exemple, la valeur 1e2 littérale est égale à la valeur numérique 100.

Les littéraux réels peuvent avoir un suffixe de type et un suffixe multiplicateur.

Suffixe Signification
d type de données decimal
kb kibibyte (10241) multiplicateur
mb mebibyte (10242) multiplicateur
gb gigibyte (10243) multiplicateur
tb teribyte (10244) multiplicateur
pb petibyte (10245) multiplicateur

Il existe deux types de littéraux réels : double et decimal. Elles sont indiquées par l’absence ou la présence, respectivement, du suffixe de type décimal. PowerShell ne prend pas en charge une représentation littérale d’une [float] valeur. Un littéral double réel a le type [double]. Un littéral réel décimal a le type [decimal]. Les zéros de fin dans la partie fractionnaire d’un littéral réel décimal sont significatifs.

Si la valeur des chiffres du composant exposant dans un [double] littéral réel est inférieure à la valeur minimale prise en charge, la valeur de ce [double] littéral réel est 0. Si la valeur des chiffres du composant exposant dans un [decimal] littéral réel est inférieure à la valeur minimale prise en charge, ce littéral est mal formé. Si la valeur des chiffres du composant exposant dans un [double] littéral réel ou [decimal] réel est supérieure à la valeur maximale prise en charge, ce littéral est mal formé.

Remarque

La syntaxe permet à un littéral double réel d’avoir un suffixe de type long. PowerShell traite ce cas comme un littéral entier dont la valeur est représentée par le type [long]. Cette fonctionnalité a été conservée à des fins de compatibilité descendante avec les versions antérieures de PowerShell. Toutefois, il est déconseillé aux programmeurs d’utiliser des littéraux entiers de cette forme, car ils peuvent facilement masquer la valeur réelle du littéral. Par exemple, 1.2L a la valeur 1, 1.2345e1L a la valeur 12 et 1.2345e-5L a la valeur 0, dont aucune n’est immédiatement évidente.

Multiplicateurs numériques

Pour des raisons pratiques, les entiers et les littéraux réels peuvent contenir un multiplicateur numérique, qui indique l’un des ensembles de puissances couramment utilisées de 2. Le multiplicateur numérique peut être écrit dans n’importe quelle combinaison de lettres majuscules ou minuscules.

Les suffixes multiplicateurs peuvent être utilisés en combinaison avec les usuffixes , ulet l de type.

Exemples multiplicateurs

PS> 1kb
1024

PS> 1.30Dmb
1363148.80

PS> 0x10Gb
17179869184

PS> 1.4e23tb
1.5393162788864E+35

PS> 0x12Lpb
20266198323167232

Accélérateurs de type numérique

PowerShell prend en charge les accélérateurs de type suivants :

Accélérateur Remarque Description
[byte] Octet (non signé)
[sbyte] Octet (signé)
[int16] Entier de 16 bits
[uint16] Entier 16 bits (non signé)
[int32] Entier de 32 bits
[int] alias pour [int32] Entier de 32 bits
[uint32] Entier 32 bits (non signé)
[int64] Entier 64 bits
[long] alias pour [int64] Entier 64 bits
[uint64] Entier 64 bits (non signé)
[bigint] Voir Struct BigInteger
[single] Virgule flottante simple précision
[float] alias pour [single] Virgule flottante simple précision
[double] Double précision à virgule flottante
[decimal] Virgule flottante 128 bits

Utilisation d’autres types numériques

Pour utiliser d’autres types numériques, vous devez utiliser des accélérateurs de type, ce qui n’est pas sans certains problèmes. Par exemple, les valeurs entières élevées sont toujours analysées comme doubles avant d’être converties en tout autre type.

PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904

La valeur est analysée en tant que double première, ce qui perd la précision dans les plages supérieures. Pour éviter ce problème, entrez des valeurs sous forme de chaînes, puis convertissez-les :

PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111

Examples

Le tableau suivant contient plusieurs exemples de littéraux numériques et répertorie leur type et leur valeur :

Nombre Type Value
100 Int32 100
100D Décimal 100
100l Int64 100
1e2 Double 100
1.e2 Double 100
0x1e2 Int32 482
0x1e2L Int64 482
0x1e2D Int32 7725
482D Décimal 482
482gb Int64 517543559168
0x1e2lgb Int64 517543559168

Conversion de type numérique

Lorsque des chaînes sont converties en nombres, des indicateurs de format hexadécimal supplémentaires sont pris en charge. Ces formats supplémentaires ne sont pas reconnus en tant que littéraux.

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

Commandes qui ressemblent à des littéraux numériques

Toute commande qui ressemble à un littéral numérique doit être exécutée à l’aide de l’opérateur d’appel (&), sinon elle est interprétée comme un nombre du type associé.

Accéder aux propriétés et méthodes des objets numériques

Pour accéder à un membre d’un littéral numérique, il existe des cas où vous devez placer le littéral entre parenthèses.

  • Le littéral n’a pas de virgule décimale
  • Le littéral n’a aucun chiffre suivant le point décimal
  • Le littéral n’a pas de suffixe

Par exemple, l’exemple suivant échoue :

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

Les exemples suivants fonctionnent :

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

Les deux premiers exemples fonctionnent sans placer la valeur littérale entre parenthèses, car l’analyseur PowerShell peut déterminer où se termine le littéral numérique et la méthode GetType démarre.