Strings y números sin sorpresas: parseo, formato y precisión
Aprende a convertir y formatear datos de formularios y APIs sin caer en coerciones accidentales ni errores de redondeo, con un flujo de trabajo robusto para frontend real.
En frontend, casi todos los datos de usuario llegan como texto: inputs, query params, localStorage o respuestas de API mal tipadas.
Si no controlas cuándo usar <code>String(...)</code>, <code>Number(...)</code> o <code>parseFloat(...)</code>, empiezan los bugs silenciosos: totales mal calculados, comparaciones que fallan o formatos inconsistentes.
En esta lección vas a construir un criterio sólido para convertir, validar y presentar texto y números con precisión de producto real.
Lo que desbloquea este bloque: podrás alimentar mejor tus pipelines de [javascript-metodos-array-medio](/curso/javascript/leccion/javascript-metodos-array-medio) y tus reglas condicionales de [javascript-control-flujo-basico](/curso/javascript/leccion/javascript-control-flujo-basico).
- No mezcles responsabilidades: primero interpreta, luego calcula, después formatea.
- Piensa en cuatro pasos: (1) recibes dato crudo, casi siempre string; (2) lo conviertes al tipo correcto; (3) validas que sea utilizable; (4) lo formateas para mostrarlo al usuario.
- Separar estas fases evita meter <code>Number(...)</code> en cualquier sitio y te permite depurar más rápido cuando una pantalla muestra un total raro.
- Convertir no es suficiente: hay que limpiar y validar.
- <code>Number('')</code> devuelve <code>0</code>, lo que puede introducir falsos positivos en formularios. Por eso conviene limpiar y tratar casos vacíos explícitamente.
Modelo mental: entrada, conversión, validación y salida
No mezcles responsabilidades: primero interpreta, luego calcula, después formatea.
Piensa en cuatro pasos: (1) recibes dato crudo, casi siempre string; (2) lo conviertes al tipo correcto; (3) validas que sea utilizable; (4) lo formateas para mostrarlo al usuario.
Separar estas fases evita meter <code>Number(...)</code> en cualquier sitio y te permite depurar más rápido cuando una pantalla muestra un total raro.
Parseo seguro de datos numéricos
Convertir no es suficiente: hay que limpiar y validar.
<code>Number('')</code> devuelve <code>0</code>, lo que puede introducir falsos positivos en formularios. Por eso conviene limpiar y tratar casos vacíos explícitamente.
Cuando viene separador de miles, limpia primero el string (por ejemplo quitando comas) y después parsea. Si el resultado no es finito, corta el flujo con mensaje claro.
- <code>Number()</code> es estricto: útil cuando esperas todo el string válido.
- <code>parseFloat()</code> acepta prefijos numéricos: úsalo con cuidado.
- Valida siempre con <code>Number.isFinite()</code> antes de operar.
Formatear para usuario sin perder precisión de cálculo
Calcula con números, presenta con formato humano.
No uses el valor formateado para seguir calculando. El formato es solo capa de presentación. Primero calcula con números puros; al final conviertes a string para UI.
<code>Intl.NumberFormat</code> es preferible a concatenar símbolos manualmente porque respeta idioma, separadores y moneda.
Precisión decimal: por qué 0.1 + 0.2 da guerra
JavaScript usa coma flotante binaria; hay que saber convivir con ello.
Operaciones como <code>0.1 + 0.2</code> pueden producir <code>0.30000000000000004</code>. No es bug de tu app: es representación interna de floating point.
Para dinero, estrategia clásica: trabajar en céntimos enteros y solo formatear al final. Para redondeos puntuales, añade <code>Number.EPSILON</code> antes de <code>Math.round</code>.
Errores comunes y cómo depurarlos rápido
Depurar datos mixtos es más sencillo cuando registras tipo y valor juntos.
Cuando algo no cuadra en un cálculo, loguea <code>typeof</code>, valor original y valor convertido en la misma traza. Eso reduce muchísimo el tiempo de diagnóstico.
Evita corregir a ciegas: primero identifica en qué fase falla (entrada, conversión, validación o salida).