Compartilhar via


about_Numeric_Literals

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 u e o valor puder ser representado por tipo [int] , então seu tipo é [int].
  • Se o sufixo de tipo for u e 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.