no hay que confundir con la máxima precisión Number.MAX_VALUE valor . Todos los números en javascript se almacenan como punto flotante de 64 bits, lo que significa que puede obtener números altos (y bajos), pero solo serán precisos hasta cierto punto.
Los puntos flotantes dobles (es decir, Javascript) tienen 53 bits de precisión significativa, lo que significa que el entero "ciertamente exacto" más alto/más bajo en javascript es +/- 9007199254740992 (2^53). Los números arriba/abajo que pueden resultan para ser precisos (los que simplemente agregan 0 en el extremo, porque los bits del exponente se pueden usar para representar eso).
O, en palabras de ECMAScript: "Tenga en cuenta que todos los enteros positivos y negativos cuya magnitud no es mayor que 2^53 son representables en el tipo Número (de hecho, el entero 0 tiene dos representaciones, +0 y - 0). "
actualización
sólo para añadir un poco a la pregunta existente, la especificación ECMAScript requiere que si un número entero tiene menos de 22 dígitos, .toString()
es la salida que en notación decimal estándar (por ejemplo 169808845126909100000
como en su ejemplo). Si tiene 22 o más dígitos, saldrá en notación científica normalizada (por ejemplo, 1698088451269091000000
- 0 adicional se emite como 1.698088451269091e+21
).
Ambas respuestas son correctas, sin embargo, esta la explica en detalle y también explica lo que significa mi salida aparentemente anormal. – Mrchief