large - long integer javascript
¿Admite JavaScript enteros de 64 bits? (2)
Me preguntaba si JavaScript está manejando mal los enteros de 64 bits o estoy haciendo algo mal?
Tengo el siguiente código:
var str = "0x4000000000000000"; //4611686018427387904 decimal
var val = parseInt(str);
alert(val);
Obtengo este valor: "4611686018427388000", que es 0x4000000000000060
JavaScript representa números utilizando el IEEE-754 doble precisión (64 bits). Según tengo entendido, esto le da una precisión de 53 bits, o de quince a dieciséis dígitos decimales. Su número tiene más dígitos de los que JavaScript puede manejar, por lo que termina con una aproximación.
Esto no es realmente "mal manejo" como tal, pero obviamente no es muy útil si necesita una precisión total en números grandes. Existen algunas bibliotecas JS que pueden manejar números más grandes, por ejemplo, BigNumber e Int64 .
La versión 57 de Chromium y versiones posteriores nativamente admite enteros de precisión arbitraria. Esto se llama BigInt y también se está trabajando para otros navegadores. Es dramáticamente más rápido que las implementaciones de JavaScript.