Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 è
ue il valore può essere rappresentato dal tipo[int], il relativo tipo è[int]. - Se il suffisso di tipo è
ue 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 .