Partilhar via


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.