Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

405
Vistas
En NodeJS, ¿cómo codificar un número flotante de 32 bits de un búfer a una cadena (json) que conserva la precisión original?

La entrada es un búfer que contiene números flotantes de precisión simple (32 bits, little endian).

Lo que quiero producir es una cadena JSON que contenga esos números, conservando exactamente los mismos valores sin cambios de precisión.

El problema es: tan pronto como el valor se almacena en un number JS, se convierte a 64 bits, introduciendo cambios de precisión.

Por ejemplo:

 const buffer = Buffer.from("cdcccc3d", "hex"); // cdcccc3d is 0.1 in 32 bits float LE console.log(buffer.readFloatLE(0)); // 0.10000000149011612 => bad

¿Cómo obtener este valor como una cadena que conserva la precisión original sin conversión? Aquí: "0.1" .

Punto de bonificación si logro producir una cadena JSON que contiene el número con la precisión original: { "value": 0.1 } .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los bytes little-endian cd cc cc 3d son, en orden big-endian, 3d cc cc cd, o los bits 0011 1101 1100 1100 1100 1100 1100 1101.

En la codificación IEEE-754 binary32, 0 es el bit de signo, 011 1101 1 son los bits de campo de exponente y 100 1100 1100 1100 1100 1101 son los bits de campo de significado.

Un bit de signo 0 significa positivo.

Los bits de campo de exponente 011 1101 1 son 123 como binario sin formato. Los exponentes se codifican con un sesgo de 127, por lo que el exponente representado es 123−127 = −4.

Dado que el campo exponente no es cero (o todos unos, que se usa para infinitos y NaN), se antepone un 1 a los bits del campo significado, formando 1100 1100 1100 1100 1100 1101. Como binario sin procesar, esto es 13,421,773. Los significados se codifican con una escala de 2 23 , por lo que el significado representado es 13 421 773/2 23 .

Combinando el signo, el exponente y el significado, el valor representado es +2 −4 •13,421,773/2 23 = 0.100000001490116119384765625. Este es el valor exacto representado, sin error. Entonces puede ver que el número producido para él, "0.10000000149011612" es exacto, hasta donde llega.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda