1

Estoy intentando convertir un numero entero largo de 42 digitos a string el numero es:

3101201907179244241900110010020000000931934567813

he intentado lo siguiente:

const myNumb = 3101201907179244241900110010020000000931934567813;
alert( myNumb.toLocaleString('fullwide', { useGrouping: false }) );

resultado:

3101201907179240000000000000000000000000000000000

he intentado diferentes soluciones como estas: stackoverflow

Ninguna me ha dado resultado quiza alguien me podria comentar como solucionar este problema gracias..!!

Diego Avila
  • 5,306
  • 2
  • 16
  • 40
  • Nunca he tenido la necesidad de usar algo así pero tal vez alguna de estas librerías te ayude: https://www.slant.co/topics/5804/~javascript-library-for-dealing-with-large-numbers – Juan Jan 31 '19 at 16:47

2 Answers2

5

El número que estás usando es demasiado grande, JavaScript no lo soporta sin perder precisión. El máximo entero que se puede usar de manera segura es 9007199254740991, puedes obtenerlo con Number.MAX_SAFE_INTEGER. A menos que necesites hacer cálculos con ese número te recomiendo que mejor lo guardes como un string.

const numero = '3101201907179244241900110010020000000931934567813';

Si necesitas hacer operaciones existen algunas alternativas:

Hay una nueva clase BigInt que sirve para manipular números enteros de precisión arbitraria pero es soportada por muy pocos navegadores. Actualmente solo Chrome y Opera.

Utilizar una librería de números grandes. Existen librerías para manejar este tipo de números sin perder precisión pero no tienen el mismo rendimiento que el objeto nativo BigInt.

Diego
  • 5,603
  • 1
  • 15
  • 38
0

Lamentablemente JavaScript no soporta este numero muy grande, como dijo el compañero, la solución sería convertir el numero a string y devolverlo de la siguiente manera:

  const numero = '3101201907179244241900110010020000000931934567813';
  var n = numero.toString();
 alert(n);

Otra solución que he encontrado es utilizar librerías externas para ello como BigInteger y poder utilizarlo así:

var n = bigInt("91942213363574161572522430563301811072406154908250")
    .plus("91942213363574161572522430563301811072406154908250");

Te dejo una pregunta similar, Saludos

Manueel Perezz
  • 284
  • 3
  • 18