Datos numéricos
La elección entre los dos tipos de datos numéricos de JScript, datos enteros y datos de punto flotante, depende de las circunstancias específicas en las que se utilicen. Además, hay distintas formas de representar los datos enteros y los datos de punto flotante literalmente.
Los números enteros positivos, los números enteros negativos y el cero son números enteros. Se pueden representar en base 10 (decimal), base 8 (octal) y base 16 (hexadecimal). La mayor parte de los números de JScript se escriben en decimal. Para denotar enteros octales, antepóngales un 0 (cero). Sólo pueden contener dígitos del 0 al 7. Un número precedido por un 0 que contiene los dígitos 8 o 9 se interpreta como un número decimal. El uso de números octales no suele ser recomendable.
Para indicar enteros hexadecimales (hex), antepóngales "0x" (cero y x o X). Sólo pueden contener dígitos del 0 al 9 y letras de la A a la F (mayúsculas o minúsculas). Las letras comprendidas entre la A y la F se representan, como dígitos, con los números comprendidos entre 10 y 15 en base 10. Es decir, 0xF es equivalente a 15 y 0x10 es equivalente a 16.
Los números octales y hexadecimales pueden ser negativos, pero no pueden contener una parte decimal ni escribirse en notación científica (exponencial).
Los valores de punto flotante son números enteros con una parte decimal. Al igual que los enteros, se pueden representar literalmente con dígitos seguidos del separador decimal y más dígitos. Además, pueden expresarse en notación científica. Es decir, se utiliza una e en mayúsculas o minúsculas para representar "diez a la potencia de". Los números que comienzan con un solo 0 y contienen un separador decimal se interpretan como un literal decimal de punto flotante y no como un literal octal.
Además, en JScript los números de punto flotante pueden representar valores numéricos especiales, algo que no pueden hacer los tipos de datos integrales. Estos son:
NaN (Not a number, no es un número): se utiliza al realizar una operación matemática en datos inapropiados, como cadenas o con el valor no definido.
Infinity: se utiliza cuando un número positivo es demasiado grande para representarlo en JScript.
-Infinity (infinito negativo): se usa cuando un número negativo es demasiado grande para representarlo en JScript.
Cero negativo y positivo. JScript distingue entre cero positivo y negativo en algunos casos.
A continuación se incluyen algunos ejemplos de números de JScript. Tenga en cuenta que un número que comience con "0x" y contenga un separador decimal generará un error.
Número |
Descripción |
Equivalente decimal |
---|---|---|
,0001, 0,0001, 1e-4, 1,0e-4 |
Cuatro números de punto flotante equivalentes. |
0.0001 |
3,45e2 |
Número en punto flotante. |
345 |
42 |
Entero. |
42 |
0378 |
Entero. Aunque parece un número octal (comienza con un cero), 8 no es un dígito octal válido, por lo que el número se interpretará como un decimal. Esto genera una advertencia de nivel 1. |
378 |
0377 |
Entero octal. Observe que aunque en apariencia se trata del número precedente al anterior, su valor real es muy diferente. |
255 |
0.0001, 00.0001 |
Número de punto flotante. Aunque este número comienza con un cero, no es octal, ya que tiene un separador decimal. |
0.0001 |
0Xff |
Entero hexadecimal. |
255 |
0x37CF |
Entero hexadecimal. |
14287 |
0x3e7 |
Entero hexadecimal. Observe que la e no se interpreta como exponenciación. |
999 |
0x3,45e2 |
Esto es un error. Los números hexadecimales no pueden tener partes decimales. |
N/D (error del compilador) |
Las variables de cualquier tipo de datos integral pueden representar únicamente un intervalo finito de números. Si intenta asignar un literal numérico que sea demasiado grande o demasiado pequeño a un tipo de datos integral, se generará un error de incoherencia de tipos en tiempo de compilación. Para obtener más información, vea Resumen de tipos de datos.
Tipos de datos de literales
En la mayoría de los casos, el tipo de datos que JScript interpreta como literales numéricos no tiene importancia. No obstante, cuando los números son demasiado grandes o muy precisos, estos detalles son importantes.
En JScript, los literales enteros pueden representar datos del tipo int, long, ulong, decimal o double, en función del tamaño de literal y de su utilización. Los literales del intervalo del tipo int (-2147483648 a 2147483647) se interpretan como int. Los literales que están fuera de ese intervalo pero dentro del intervalo del tipo long (-9223372036854775808 a 9223372036854775807) se interpretan como long. Los literales que están fuera de ese intervalo pero dentro del intervalo del tipo ulong (9223372036854775807 a 18446744073709551615) se interpretan como ulong. El resto de los literales enteros se interpretan como tipo double, lo cual supone una pérdida de precisión. La excepción a esta última regla se produce cuando un literal se almacena inmediatamente en una variable o constante con tipo decimal, o si se pasa a una función que debe recibir un tipo decimal, en estos casos se interpretará como un tipo decimal.
Un literal de punto de flotante se interpreta en JScript como el tipo de datos double, a no ser que el literal se utilice inmediatamente como decimal (como ocurre con los literales enteros), en cuyo caso el literal se interpreta como un decimal. El tipo de datos decimal no puede representar NaN, ni Infinity positivo o negativo.