Condividi tramite


about_Numeric_Literals

Breve descrizione

Questo articolo descrive la sintassi e l'utilizzo dei valori numerici in PowerShell.

Descrizione lunga

Esistono due tipi di valori letterali numerici: integer e real. Entrambi possono avere suffissi di tipo e moltiplicatore.

Valori letterali integer

I valori letterali integer possono essere scritti in notazione decimale o esadecimale. I valori letterali esadecimali sono preceduti dal prefisso 0x per distinguerli dai numeri decimali.

I valori letterali integer possono avere un suffisso di tipo e un suffisso moltiplicatore.

Suffisso significato
l tipo di dati long
kb moltiplicatore kibibyte (10241)
mb moltiplicatore mebibyte (10242)
gb moltiplicatore gigibyte (10243)
tb Moltiplicatore teribyte (10244)
pb moltiplicatore petibyte (10245)

Il tipo di un valore letterale integer è determinato dal relativo valore, dal suffisso del tipo e dal suffisso numerico del moltiplicatore.

Per un valore letterale integer senza suffisso di tipo:

  • Se il valore può essere rappresentato dal tipo [int], ovvero il relativo tipo.
  • In caso contrario, se il valore può essere rappresentato dal tipo [long], ovvero il relativo tipo.
  • In caso contrario, se il valore può essere rappresentato dal tipo [decimal], ovvero il relativo tipo.
  • In caso contrario, è rappresentato dal tipo [double].

Per un valore letterale integer con un suffisso di tipo:

  • Se il suffisso di tipo è u e il valore può essere rappresentato dal tipo [int] , il relativo tipo è [int].
  • Se il suffisso di tipo è u e il valore può essere rappresentato dal tipo [long] , il relativo tipo è [long].
  • Se il valore può essere rappresentato dal tipo specificato, questo è il tipo.
  • In caso contrario, il valore letterale non è valido.

Valori letterali reali

I valori letterali reali possono essere scritti solo in notazione decimale. Questa notazione può includere valori frazionari in seguito a una notazione decimale e scientifica usando una parte esponenziale.

La parte esponenziale include un segno 'e' seguito da un segno facoltativo (+/-) e un numero che rappresenta l'esponente. Ad esempio, il valore 1e2 letterale è uguale al valore numerico 100.

I valori letterali reali possono avere un suffisso di tipo e un suffisso moltiplicatore.

Suffisso significato
d decimal - tipo di dati
kb moltiplicatore kibibyte (10241)
mb moltiplicatore mebibyte (10242)
gb moltiplicatore gigibyte (10243)
tb Moltiplicatore teribyte (10244)
pb moltiplicatore petibyte (10245)

Esistono due tipi di valore letterale reale: double e decimal. Questi sono indicati rispettivamente dall'assenza o dalla presenza del suffisso di tipo decimale. PowerShell non supporta una rappresentazione letterale di un [float] valore. Un valore letterale reale double ha il tipo [double]. Un valore letterale reale decimale ha il tipo [decimal]. Gli zeri finali nella parte frazionaria di un valore letterale reale decimale sono significativi.

Se il valore delle cifre dell'esponente in un [double] valore letterale reale è minore del valore minimo supportato, il valore di tale [double] valore letterale reale è 0. Se il valore delle cifre dell'esponente in un [decimal] valore letterale reale è inferiore al valore minimo supportato, tale valore letterale non è valido. Se il valore delle cifre dell'esponente in un [double] valore letterale reale o [decimal] è maggiore del valore massimo supportato, tale valore letterale non è valido.

Nota

La sintassi consente a un valore letterale reale doppio di avere un suffisso di tipo long. PowerShell considera questo caso come valore letterale integer il cui valore è rappresentato dal tipo [long]. Questa funzionalità è stata mantenuta per garantire la compatibilità con le versioni precedenti di PowerShell. Tuttavia, i programmatori sono sconsigliati di usare valori letterali integer di questo formato perché possono facilmente nascondere il valore effettivo del valore letterale. Ad esempio, 1.2L ha valore 1, 1.2345e1L ha valore 12 e 1.2345e-5L ha valore 0, nessuno dei quali è immediatamente ovvio.

Moltiplicatori numerici

Per praticità, i valori letterali interi e reali possono contenere un moltiplicatore numerico, che indica uno dei poteri di uso comune di 2. Il moltiplicatore numerico può essere scritto in qualsiasi combinazione di lettere maiuscole o minuscole.

I suffissi moltiplicatori possono essere usati in combinazione con i usuffissi di tipo , ule l .

Esempi di moltiplicatori

PS> 1kb
1024

PS> 1.30Dmb
1363148.80

PS> 0x10Gb
17179869184

PS> 1.4e23tb
1.5393162788864E+35

PS> 0x12Lpb
20266198323167232

Acceleratori di tipi numerici

PowerShell supporta gli acceleratori di tipo seguenti:

Acceleratore Nota Descrizione
[byte] Byte (senza segno)
[sbyte] Byte (firmato)
[int16] Intero a 16 bit
[uint16] Intero a 16 bit (senza segno)
[int32] Intero a 32 bit
[int] alias per [int32] Intero a 32 bit
[uint32] Intero a 32 bit (senza segno)
[int64] Integer a 64 bit
[long] alias per [int64] Integer a 64 bit
[uint64] Intero a 64 bit (senza segno)
[bigint] Vedere Struct BigInteger
[single] Singola precisione a virgola mobile
[float] alias per [single] Singola precisione a virgola mobile
[double] Precisione doppia a virgola mobile
[decimal] Virgola mobile a 128 bit

Uso di altri tipi numerici

Per lavorare con qualsiasi altro tipo numerico, è necessario usare acceleratori di tipo, che non è senza problemi. Ad esempio, i valori integer alti vengono sempre analizzati come double prima di essere sottoposti a cast in qualsiasi altro tipo.

PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904

Il valore viene analizzato come primo doppio, perdendo precisione negli intervalli più elevati. Per evitare questo problema, immettere i valori come stringhe e quindi convertirli:

PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111

Esempi

La tabella seguente contiene diversi esempi di valori letterali numerici ed elenca il tipo e il valore:

Numero Type Valore
100 Int32 100
100D Decimale 100
100l Int64 100
1e2 Double 100
1.e2 Double 100
0x1e2 Int32 482
0x1e2L Int64 482
0x1e2D Int32 7725
482D Decimale 482
482gb Int64 517543559168
0x1e2lgb Int64 517543559168

Conversione dei tipi numerici

Quando le stringhe vengono convertite in numeri, sono supportati altri indicatori di formato esadecimale. Tali formati aggiuntivi non vengono riconosciuti come valori letterali.

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

Comandi simili a valori letterali numerici

Qualsiasi comando simile a un valore letterale numerico deve essere eseguito usando l'operatore di chiamata (&), altrimenti viene interpretato come un numero del tipo associato.

Accedere a proprietà e metodi di oggetti numerici

Per accedere a un membro di un valore letterale numerico, esistono casi in cui è necessario racchiudere il valore letterale tra parentesi.

  • Il valore letterale non ha un separatore decimale
  • Il valore letterale non ha cifre che seguono il separatore decimale
  • Il valore letterale non ha un suffisso

Ad esempio, l'esempio seguente ha esito negativo:

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

Gli esempi seguenti funzionano:

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

I primi due esempi funzionano senza racchiudere tra parentesi il valore letterale perché il parser di PowerShell può determinare dove termina il valore letterale numerico e inizia il metodo GetType .