Volver al Blog
Plataforma

Precisión de Number en JavaScript y portabilidad entre runtimes

Protege los valores numéricos entre IEEE-754, BigInt, JSON y fallbacks de runtime.

BotBrowser Team

Documentación

Quieres la documentación estructurada de Plataforma?

Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.

La portabilidad numérica es un contrato de datos. Un valor atraviesa formularios, aritmética JavaScript, JSON, workers y servicios, y cada frontera puede cambiar su representación. Number usa binary64 IEEE-754: muchos decimales y enteros grandes no son exactos. Define la representación antes de comparar runtimes.

Fronteras de representación

Usa Number cuando rango y redondeo caben en binary64. Number.MAX_SAFE_INTEGER es 2^53 - 1; Number.isSafeInteger debe comprobarse antes de operar. BigInt representa enteros grandes, pero no fracciones ni operaciones mezcladas con Number sin conversión explícita. Mantén identificadores grandes como texto o BigInt y rechaza conversiones ambiguas.

La referencia MDN de Number y la referencia MDN de BigInt describen el lenguaje, no la corrección de un saldo o factura. Esa regla pertenece a la aplicación.

Enteros seguros y redondeo

Define el modo de redondeo, la unidad y el punto donde ocurre. Math.round no es una política financiera universal, especialmente para mitades negativas. Usa escala entera o texto decimal cuando la exactitud lo requiera. Separa formato visible de valor almacenado: Intl.NumberFormat muestra una cadena localizada, no cambia el valor canónico.

Prueba negativos, mitades, valores enormes y pequeños. No reconstruyas un identificador después de convertirlo a un Number inseguro.

JSON y serialización

JSON no tiene tipo BigInt. JSON.stringify({ amount: 1n }) falla sin una política explícita. Usa un esquema etiquetado como { "kind": "bigint", "value": "9007199254740993" }; valida etiqueta, rango y forma antes de construir BigInt. Para decimales exactos, transmite texto con escala y signo declarados, no un número JSON ambiguo.

Prueba un entero seguro, el primer inseguro, 0.1 + 0.2, una mitad negativa y un identificador de 64 bits en ventana, worker y servicio. Compara la representación canónica y el resultado de dominio, no los espacios del JSON.

Alternativa entre runtimes

Sondea el camino real y registra una capacidad como bigint-json-adapter-v2, no una identidad del navegador. Si falta el adaptador, conserva el texto original y selecciona una ruta de cadenas o un servicio con el mismo esquema. La alternativa es monotónica: una vez perdido un bit no se puede recuperar.

BotBrowser puede ejecutar recorridos autorizados de formularios numéricos, serialización y comparación repetible en pipelines documentados. No cambia IEEE-754, no añade aritmética decimal ni certifica un cálculo empresarial. Consulta BotBrowser Advanced features y conserva las aserciones de la aplicación.

Entrada y evidencia

Crea el registro de tarea antes de analizar. Conserva texto, escala, signo y esquema para que un rechazo no destruya el único valor. Usa fixtures 9007199254740991, 9007199254740992, 1n, mitades y JSON etiquetado. Incluye cancelación, reinicio de worker, etiqueta inválida y endpoint legado.

Los diagnósticos guardan esquema y etapa, no saldos ni identificadores. Anuncia el cambio de ruta, conserva el foco y deja editable la entrada. Consulta la validación de versiones y la guía de compatibilidad.

Registro fijo de publicación

Publica versión de esquema, ejemplos canónicos, parser, serializer, modo de redondeo, alternativa, contextos y resultados esperados. Separa funcionalidad de latencia y conserva evidencia negativa: JSON legado rechazó BigInt, mientras el adaptador etiquetado mantuvo el identificador. El registro es inmutable; una corrección crea otro con motivo. Declara que no prueba cálculos arbitrarios ni todos los motores.

La secuencia es elegir representación, proteger límites seguros, serializar explícitamente, sondear, cambiar de ruta con la entrada retenida y fijar evidencia.

El contrato del cliente debe elegir una forma canónica.

Los ceros iniciales pueden ser parte del identificador.

El redondeo se aplica una sola vez en la frontera declarada.

La vista localizada no sustituye al valor almacenado.

El signo debe conservarse al cambiar de representación.

La escala acompaña a cada decimal transmitido.

Un valor fuera de rango produce un estado recuperable.

El usuario puede corregir el campo sin volver a escribirlo.

El adaptador conserva la entrada cuando cambia de ruta.

El servicio recibe el esquema que espera.

La ventana y el worker comparten ejemplos canónicos.

El parser valida antes de convertir.

El serializer rechaza tipos no declarados.

El JSON de respuesta mantiene la misma escala.

La comparación verifica tipo y resultado.

La prueba incluye un valor negativo.

La prueba incluye una mitad exacta.

La prueba incluye un entero cercano al límite.

La prueba incluye una cadena con ceros iniciales.

La prueba incluye una entrada vacía.

La prueba incluye una etiqueta desconocida.

La cancelación deja el origen disponible.

El reinicio del worker no cambia el contrato.

El caché usa la forma canónica.

La actualización conserva la compatibilidad anterior.

La documentación muestra un caso válido y otro rechazado.

La interfaz anuncia la alternativa elegida.

La salida visible indica la unidad.

El soporte recibe etapa y versión, no el valor privado.

Una entrada numérica atraviesa fronteras de representación hasta un resultado verificado.

Fuentes públicas

#JavaScript#Precisión Numérica#BigInt#Portabilidad

Lleva BotBrowser de la investigación a producción

Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.