Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Este artigo descreve a sintaxe e o uso de valores numéricos no PowerShell.
Descrição longa
Existem dois tipos de literais numéricos: inteiros e reais. Ambos podem ter sufixos de tipo e multiplicador.
Literais inteiros
Literais inteiros podem ser escritos em notação decimal ou hexadecimal. Os literais hexadecimais são prefixados com 0x para distingui-los dos números decimais.
Os literais inteiros podem ter um sufixo de tipo e um sufixo multiplicador.
| Sufixo | Significado |
|---|---|
l |
Tipo de dados longo |
kb |
Multiplicador de Kibibyte (10241) |
mb |
Multiplicador de mebibytes (10242) |
gb |
Gigibyte (10243) Multiplicador |
tb |
multiplicador teribyte (10244) |
pb |
Multiplicador de petibytes (10245) |
O tipo de um literal inteiro é determinado por seu valor, o sufixo de tipo e o sufixo do multiplicador numérico.
Para um literal inteiro sem sufixo de tipo:
- Se o valor puder ser representado pelo tipo
[int], esse é o seu tipo. - Caso contrário, se o valor puder ser representado pelo tipo
[long], esse é o seu tipo. - Caso contrário, se o valor puder ser representado pelo tipo
[decimal], esse é o seu tipo. - Caso contrário, ele é representado pelo tipo
[double].
Para um literal inteiro com um sufixo de tipo:
- Se o sufixo de tipo for
ue o valor puder ser representado por tipo[int], então seu tipo é[int]. - Se o sufixo de tipo for
ue o valor puder ser representado por tipo[long], então seu tipo é[long]. - Se seu valor puder ser representado pelo tipo especificado, esse será o seu tipo.
- Caso contrário, esse literal será malformado.
Literais reais
Literais reais só podem ser escritos em notação decimal. Essa notação pode incluir valores fracionários após um ponto decimal e notação científica usando uma parte exponencial.
A parte exponencial inclui um 'e' seguido por um sinal opcional (+/-) e um número que representa o expoente. Por exemplo, o valor 1e2 literal é igual ao valor numérico 100.
Literais reais podem ter um sufixo de tipo e um sufixo multiplicador.
| Sufixo | Significado |
|---|---|
d |
tipo de dados decimal |
kb |
Multiplicador de Kibibyte (10241) |
mb |
Multiplicador de mebibytes (10242) |
gb |
Gigibyte (10243) Multiplicador |
tb |
multiplicador teribyte (10244) |
pb |
Multiplicador de petibytes (10245) |
Há dois tipos de literal real: double e decimal. Estes são indicados pela ausência ou presença, respectivamente, de sufixo do tipo decimal. O PowerShell não dá suporte a uma representação literal de um [float] valor. Um literal real duplo tem tipo [double]. Um literal real decimal tem o tipo [decimal].
Zeros à direita na parte fracionária de um literal real decimal são significativos.
Se o valor dos dígitos da parte do expoente em um [double] literal real for menor que o mínimo suportado, o valor desse [double] literal real será 0. Se o valor dos dígitos da parte do expoente em um [decimal] literal real for menor que o mínimo suportado, esse literal estará malformado. Se o valor dos dígitos da parte do expoente em um [double] literal real ou [decimal] for maior que o máximo suportado, esse literal estará malformado.
Observação
A sintaxe permite que um literal real duplo tenha um sufixo de tipo longo.
O PowerShell trata esse caso como um literal inteiro cujo valor é representado pelo tipo [long]. Esse recurso foi mantido para fins de compatibilidade com versões anteriores do PowerShell. No entanto, os programadores são desencorajados de usar literais inteiros desse formulário, pois podem facilmente obscurecer o valor real do literal. Por exemplo, 1.2L tem valor 1, 1.2345e1L tem valor 12 e 1.2345e-5L tem valor 0, nenhum dos quais é imediatamente óbvio.
Multiplicadores numéricos
Por conveniência, literais inteiros e reais podem conter um multiplicador numérico, que indica um de um conjunto de potências comumente usadas de 2. O multiplicador numérico pode ser escrito em qualquer combinação de letras maiúsculas ou minúsculas.
Os sufixos multiplicadores podem ser usados em combinação com os sufixos u, ul, e l tipo.
Exemplos de multiplicadores
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Aceleradores de tipo numérico
O PowerShell dá suporte aos seguintes aceleradores de tipo:
| Acelerador | Observação | Descrição |
|---|---|---|
[byte] |
Byte (sem sinal) | |
[sbyte] |
Byte (assinado) | |
[int16] |
Inteiro de 16 bits | |
[uint16] |
Inteiro de 16 bits (sem sinal) | |
[int32] |
Inteiro de 32 bits | |
[int] |
alias para [int32] |
Inteiro de 32 bits |
[uint32] |
Inteiro de 32 bits (sem sinal) | |
[int64] |
Inteiro de 64 bits | |
[long] |
alias para [int64] |
Inteiro de 64 bits |
[uint64] |
Inteiro de 64 bits (sem sinal) | |
[bigint] |
Consulte BigInteger Struct | |
[single] |
Ponto flutuante de precisão única | |
[float] |
alias para [single] |
Ponto flutuante de precisão única |
[double] |
Ponto flutuante de dupla precisão | |
[decimal] |
Ponto flutuante de 128 bits |
Trabalhando com outros tipos numéricos
Para trabalhar com qualquer outro tipo numérico, você deve usar aceleradores de tipo, o que não é isento de alguns problemas. Por exemplo, valores inteiros altos são sempre analisados como double antes de serem convertidos em qualquer outro tipo.
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
O valor é analisado como um duplo primeiro, perdendo precisão nos intervalos mais altos. Para evitar esse problema, insira valores como strings e converta-os:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
Exemplos
A tabela a seguir contém vários exemplos de literais numéricos e lista seu tipo e valor:
| Número | Tipo | Valor |
|---|---|---|
| 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 |
Conversão de tipo numérico
Quando as cadeias de caracteres são convertidas em números, há suporte para indicadores de formato hexadecimal adicionais. Esses formatos adicionais não são reconhecidos como literais.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
Comandos que se parecem com literais numéricos
Qualquer comando que se pareça com um literal numérico deve ser executado usando o operador de chamada (&), caso contrário, ele será interpretado como um número do tipo associado.
Propriedades de acesso e métodos de objetos numéricos
Para acessar um membro de um literal numérico, há casos em que você precisa colocar o literal entre parênteses.
- O literal não tem um ponto decimal
- O literal não tem nenhum dígito após o ponto decimal
- O literal não tem um sufixo
Por exemplo, o exemplo a seguir falha:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Os exemplos a seguir funcionam:
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
Os dois primeiros exemplos funcionam sem colocar o valor literal entre parênteses porque o analisador do PowerShell pode determinar onde o literal numérico termina e o método GetType começa.