about_Numeric_Literals
Breve descrição
Este artigo descreve a sintaxe e o uso de valores numéricos no PowerShell.
Descrição longa
Existem dois tipos de literais numéricos: inteiro e real. 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 para 0x
distingui-los dos números decimais.
Literais inteiros podem ter um sufixo de tipo e um sufixo multiplicador.
Sufixo | Significado |
---|---|
l |
Tipo de dados longo |
kb |
Multiplicador Kibibyte (10241) |
mb |
multiplicador mebibyte (10242) |
gb |
gigibyte (10243) multiplicador |
tb |
Multiplicador Teribyte (10244) |
pb |
petibyte (10245) multiplicador |
O tipo de um literal inteiro é determinado pelo seu valor, o sufixo de tipo e o sufixo multiplicador numérico.
Para um literal inteiro sem sufixo de tipo:
- Se o valor pode ser representado por tipo
[int]
, esse é o seu tipo. - Caso contrário, se o valor puder ser representado por tipo
[long]
, esse é o seu tipo. - Caso contrário, se o valor puder ser representado por tipo
[decimal]
, esse é o seu tipo. - Caso contrário, ele é representado por tipo
[double]
.
Para um literal inteiro com um sufixo de tipo:
- Se o sufixo de tipo é
u
e o valor pode ser representado por tipo[int]
, então seu tipo é[int]
. - Se o sufixo de tipo é
u
e o valor pode ser representado por tipo[long]
, então seu tipo é[long]
. - Se o seu valor pode ser representado pelo tipo especificado, então esse é o seu tipo.
- Caso contrário, esse literal é malformado.
Literais reais
Literais reais só podem ser escritos em notação decimal. Esta notação pode incluir valores fracionários seguindo uma vírgula decimal e notação científica usando uma parte exponencial.
A parte exponencial inclui um «e» seguido de 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 decimais |
kb |
Multiplicador Kibibyte (10241) |
mb |
multiplicador mebibyte (10242) |
gb |
gigibyte (10243) multiplicador |
tb |
Multiplicador Teribyte (10244) |
pb |
petibyte (10245) multiplicador |
Existem dois tipos de literal real: duplo e decimal. Estes são indicados pela ausência ou presença, respectivamente, de sufixo do tipo decimal. O PowerShell não oferece suporte a uma representação literal de um [float]
valor. Um literal real duplo tem tipo [double]
. Um literal real decimal tem tipo [decimal]
.
Os zeros à direita na parte da fração de um literal real decimal são significativos.
Se o valor dos dígitos da parte expoente em um [double]
literal real for menor do que o mínimo suportado, o valor desse [double]
literal real será 0. Se o valor dos dígitos da parte expoente em um [decimal]
literal real for menor do que o mínimo suportado, esse literal será malformado. Se o valor dos dígitos da parte expoente em um [double]
literal real for [decimal]
maior do que o máximo suportado, esse literal será malformado.
Nota
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 por tipo [long]
. Esse recurso foi mantido para compatibilidade com versões anteriores do PowerShell. No entanto, os programadores são desencorajados de usar literais inteiros desta forma, pois eles 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 são imediatamente óbvios.
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 oferece suporte aos seguintes aceleradores de tipo:
Acelerador | Nota | Description |
---|---|---|
[byte] |
Byte (não assinado) | |
[sbyte] |
Byte (assinado) | |
[Int16] |
Inteiro de 16 bits | |
[UInt16] |
Inteiro de 16 bits (não assinado) | |
[Int32] |
Inteiro de 32 bits | |
[int] |
alias para [int32] |
Inteiro de 32 bits |
[UInt32] |
Inteiro de 32 bits (não assinado) | |
[Int64] |
Número inteiro de 64 bits | |
[long] |
alias para [int64] |
Número inteiro de 64 bits |
[UInt64] |
Inteiro de 64 bits (não assinado) | |
[bigint] |
Veja BigInteger Struct | |
[single] |
Ponto flutuante de precisão única | |
[float] |
alias para [single] |
Ponto flutuante de precisão única |
[double] |
Ponto flutuante de precisão dupla | |
[decimal] |
Ponto flutuante de 128 bits |
Trabalhar com outros tipos numéricos
Para trabalhar com quaisquer outros tipos numéricos você deve usar aceleradores de tipo, o que não é isento de alguns problemas. Por exemplo, valores inteiros altos são sempre analisados como duplos antes de serem convertidos para 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 cadeias de caracteres e, em seguida, 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 | Type | valor |
---|---|---|
100 | Int32 | 100 |
100D | Decimal | 100 |
100l | Int64 | 100 |
1e2 | Duplo | 100 |
1.e2 | Duplo | 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, indicadores de formato hexadecimal adicionais são suportados. 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, é interpretado como um número do tipo associado.
Acessar propriedades 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 seguindo a vírgula 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 seguintes exemplos 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.