déjame explicarte mi problema. Usé el siguiente método para convertir mi número binario a número decimal: number.toString(16)
Este método genera un número que de hecho parece estar en forma hexadecimal. Pero el problema está ahí: necesito la identificación de un usuario que recupero a través de una API de autenticación (steam en este caso), y necesito recuperar datos a través de una base de datos SQL de terceros. El identificador de este usuario en la base de datos es de hecho su identificador de vapor, pero en forma hexadecimal.
El problema es que el identificador que recupero y transformo en hexadecimal no es igual al de la base de datos. Entonces, uno podría preguntarse si el identificador de la base de datos no es simplemente diferente. ¡Y ahí es donde entran mis diversas pruebas para demostrarme que no!
Déjame explicarte con más detalle:
Con este código:
let n = 76561199121591748; console.log(n.toString(16))El código me devuelve:
110000145386dc0Esto debería devolverme esto (que es la identificación de la base de datos):
110000145386dc4De acuerdo con todas mis pruebas (ejemplo de scripts en línea, prueba de bibliotecas de conversión de nodejs, etc.), todo me lleva a resultados falsos. Aún así, los sitios de conversiones en línea (como este sitio ) me muestran el buen resultado. Así que imagino que el problema debe venir del método. ¿Puedes decirme si hay una explicación para esto? Gracias por adelantado
Los números de Javascript son flotantes de doble precisión IEEE. El conjunto de enteros que se pueden representar exactamente son aquellos enteros n tales que - 2 53 -1 <= n <= 2 53 -1.
La constante Number.MAX_SAFE_INTEGER tiene el valor 2 53 -1, o 9,007,199,254,740,991 decimal.
Su valor 76,561,199,121,591,748 es un orden de magnitud mayor que Number.MAX_SAFE_INTEGER y, por lo tanto, no se puede representar exactamente.
Puede echar un vistazo al uso de BigInt en lugar de Number .