Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
En este artículo se describe la sintaxis y el uso de valores numéricos en PowerShell.
Descripción larga
Hay dos tipos de literales numéricos: entero y real. Ambos pueden tener sufijos de tipo y multiplicador.
Literales enteros
Los literales enteros se pueden escribir en notación decimal o hexadecimal. Los literales hexadecimales tienen el prefijo 0x para distinguirlos de números decimales.
Los literales enteros pueden tener un sufijo de tipo y un sufijo multiplicador.
| Sufijo | Significado |
|---|---|
l |
tipo de datos long |
kb |
kibibyte (10241) multiplicador |
mb |
multiplicador de mebibyte (10242) |
gb |
gigibyte (10243) multiplicador |
tb |
teribyte (10244) multiplicador |
pb |
petibyte (10245) multiplicador |
El tipo de un literal entero viene determinado por su valor, el sufijo de tipo y el sufijo multiplicador numérico.
Para un literal entero sin sufijo de tipo:
- Si el valor se puede representar mediante el tipo
[int], es su tipo. - De lo contrario, si el valor se puede representar mediante el tipo
[long], es su tipo. - De lo contrario, si el valor se puede representar mediante el tipo
[decimal], es su tipo. - De lo contrario, se representa mediante el tipo
[double].
Para un literal entero con un sufijo de tipo:
- Si el sufijo de tipo es
uy el valor se puede representar mediante el tipo[int], su tipo es[int]. - Si el sufijo de tipo es
uy el valor se puede representar mediante el tipo[long], su tipo es[long]. - Si su valor se puede representar mediante el tipo especificado, ese es su tipo.
- De lo contrario, ese literal tiene un formato incorrecto.
Literales reales
Los literales reales solo se pueden escribir en notación decimal. Esta notación puede incluir valores fraccionarios después de un separador decimal y una notación científica mediante una parte exponencial.
La parte exponencial incluye un "e" seguido de un signo opcional (+/-) y un número que representa el exponente. Por ejemplo, el valor 1e2 literal es igual al valor numérico 100.
Los literales reales pueden tener un sufijo de tipo y un sufijo multiplicador.
| Sufijo | Significado |
|---|---|
d |
tipo de datos decimal |
kb |
kibibyte (10241) multiplicador |
mb |
multiplicador de mebibyte (10242) |
gb |
gigibyte (10243) multiplicador |
tb |
teribyte (10244) multiplicador |
pb |
petibyte (10245) multiplicador |
Hay dos tipos de literales reales: doble y decimal. Estos se indican mediante la ausencia o presencia, respectivamente, del sufijo de tipo decimal. PowerShell no admite una representación literal de un [float] valor. Un literal real doble tiene el tipo [double]. Un literal real decimal tiene el tipo [decimal].
Los ceros finales en la parte de fracción de un literal real decimal son significativos.
Si el valor de los dígitos de la parte exponente en un [double] literal real es menor que el mínimo admitido, el valor de ese [double] literal real es 0. Si el valor de los dígitos de la parte exponente en un [decimal] literal real es menor que el mínimo admitido, ese literal tiene un formato incorrecto. Si el valor de los dígitos de la parte exponente en un [double] literal real o [decimal] es mayor que el máximo admitido, ese literal tiene un formato incorrecto.
Nota:
La sintaxis permite que un literal real doble tenga un sufijo de tipo largo.
PowerShell trata este caso como un literal entero cuyo valor se representa mediante el tipo [long]. Esta característica se ha conservado por compatibilidad con las versiones anteriores de PowerShell. Sin embargo, no se recomienda a los programadores usar literales enteros de este tipo, ya que pueden ocultar fácilmente el valor real del literal. Por ejemplo, 1.2L tiene el valor 1, 1.2345e1L tiene el valor 12 y 1.2345e-5L tiene el valor 0, ninguno de los cuales es inmediatamente obvio.
Multiplicadores numéricos
Para mayor comodidad, los literales enteros y reales pueden contener un multiplicador numérico, que indica uno de un conjunto de potencias de uso común de 2. El multiplicador numérico se puede escribir en cualquier combinación de letras mayúsculas o minúsculas.
Los sufijos multiplicadores se pueden usar en combinación con los usufijos de tipo , uly l .
Ejemplos del multiplicador
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Aceleradores de tipos numéricos
PowerShell admite los siguientes aceleradores de tipos:
| Acelerador | Nota: | Descripción |
|---|---|---|
[byte] |
Byte (sin signo) | |
[sbyte] |
Byte (firmado) | |
[int16] |
Entero de 16 bits | |
[uint16] |
Entero de 16 bits (sin signo) | |
[int32] |
Entero de 32 bits | |
[int] |
alias para [int32] |
Entero de 32 bits |
[uint32] |
Entero de 32 bits (sin signo) | |
[int64] |
Entero de 64 bits | |
[long] |
alias para [int64] |
Entero de 64 bits |
[uint64] |
Entero de 64 bits (sin signo) | |
[bigint] |
Consulte Struct bigInteger | |
[single] |
Punto flotante de precisión única | |
[float] |
alias para [single] |
Punto flotante de precisión única |
[double] |
Punto flotante de precisión doble | |
[decimal] |
Punto flotante de 128 bits |
Trabajar con otros tipos numéricos
Para trabajar con cualquier otro tipo numérico, debe usar aceleradores de tipos, que no es sin problemas. Por ejemplo, los valores enteros altos siempre se analizan como double antes de convertirse a cualquier otro tipo.
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
El valor se analiza como un doble primero, lo que pierde precisión en los intervalos más altos. Para evitar este problema, escriba valores como cadenas y, a continuación, conviértalos:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
Examples
La tabla siguiente contiene varios ejemplos de literales numéricos y enumera su tipo y 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 |
Conversión de tipos numéricos
Cuando las cadenas se convierten en números, se admiten indicadores de formato hexadecimal adicionales. Esos formatos adicionales no se reconocen como literales.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
Comandos que tienen un aspecto similar a los literales numéricos
Cualquier comando que parezca un literal numérico debe ejecutarse mediante el operador de llamada (&), de lo contrario, se interpreta como un número del tipo asociado.
Obtener acceso a propiedades y métodos de objetos numéricos
Para acceder a un miembro de un literal numérico, hay casos en los que es necesario incluir el literal entre paréntesis.
- El literal no tiene un separador decimal
- El literal no tiene ningún dígito después del separador decimal.
- El literal no tiene un sufijo
Por ejemplo, se produce un error en el ejemplo siguiente:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Los ejemplos siguientes funcionan:
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
Los dos primeros ejemplos funcionan sin incluir el valor literal entre paréntesis porque el analizador de PowerShell puede determinar dónde finaliza el literal numérico y se inicia el método GetType .