Quiz: ¿Puedes contar con JavaScript?
¿Conoces la diferencia entre parseInt y parseFloat?
¡Bienvenido al reto de números de JavaScript!
Pon a prueba tus conocimientos de números en JavaScript, incluidos parseInt, parseFloat y BigInt.
Veremos cómo interpretar expresiones numéricas en distintas bases, manejar la precisión de punto flotante y entender las peculiaridades del sistema numérico de JavaScript.
Solo son números, ¿qué tan difícil puede ser? 🤓
parseInt(" 123456.00")La función parseInt ignora los espacios y analiza la secuencia inicial de dígitos como un entero. Aquí, se detiene en el punto decimal, por lo que solo se devuelve 123456.
0.1 + 0.2 === 0.3Debido a errores de precisión de punto flotante, 0.1 + 0.2 no es exactamente igual a 0.3. Por la forma en que los números de punto flotante se almacenan en memoria, el resultado es 0.30000000000000004. El estándar IEEE 754 para el manejo de aritmética de punto flotante es el culpable, no puede representar algunos números con exactitud. Este es un problema común en todos los lenguajes de programación. Eventualmente te encontrarás con un decimal que se repite infinitamente, y sin importar el lenguaje, la computadora simplemente tiene que dejar de perseguir dígitos infinitamente repetidos.
Algunos lenguajes como Python y Java tienen Decimal o BigDecimal para manejar esto, pero no está incorporado en JavaScript. Puedes usar bibliotecas como big.js o decimal.js para tratar estos casos.
(Nota: Algunos lenguajes están diseñados para manejar fracciones, números imaginarios, etc., a un nivel lógico más alto, preservando expresiones literales. Pero aún así deben lidiar con los mismos problemas de precisión de punto flotante a nivel de hardware.)
Number.MAX_VALUE * 2Dado que Number.MAX_VALUE es el número regular representable más grande en JavaScript, superar su límite provocará un desbordamiento rápido, básicamente verás resultados sin sentido. Multiplicarlo por 2 da como resultado Infinity.
Ya sabes, JavaScript a veces es así.
parseInt("42") === parseFloat("42")En JavaScript, tanto parseInt como parseFloat interpretarán la cadena “42” como el número 42. Por lo tanto, la comparación parseInt("42") === parseFloat("42") evalúa a true. Mientras que parseInt deja de analizar en el primer carácter no numérico, parseFloat continúa analizando hasta encontrar un carácter que no forme parte de un número de punto flotante. Sin embargo, como no hay puntos decimales ni otros caracteres no numéricos en “42”, ambas funciones devuelven el mismo valor.
¿Qué resultará esto?
parseInt("0x2A") === parseInt("2a", 16)Cuando la base se omite o es 0, parseInt reconoce el prefijo 0x (o 0X) como hexadecimal (base 16). No infiere binario u octal a partir de los prefijos 0b o 0o.
Por lo tanto es equivalente a pasar un radix de 16. Así, parseInt("0x2A") es lo mismo que parseInt("2a", 16). (No distingue mayúsculas de minúsculas.)
[24, 'One', 42].map(parseInt)El segundo argumento de parseInt (el radix) coincide con el argumento index de los métodos de array. Esto produce resultados inesperados, ya que parseInt("One", 1) devuelve NaN por la entrada inválida.
El primer elemento, 24, se analiza como 24 en base 0 (detección automática), así que sigue siendo 24. El segundo elemento, 'One', se analiza como NaN en base 1. El tercer elemento, 42, se analiza usando base 2. En base 2, '42' es NaN, por lo que el resultado es [24, NaN, NaN].
Esto es una trampa frecuente con parseInt y map. Si quieres convertir un array de strings a números, el único método “incorporado” seguro es .map(Number) o añadir una función de callback .map(x => parseInt(x, 10)).
¿Cuál será el resultado de este código?
console.log(parseInt(null), Number(null))parseInt coacciona la entrada a una cadena, así que null se convierte en "null". Como "null" no tiene caracteres válidos en base‑10 (números normales) devolverá NaN.
Number(null) devuelve 0. porque a JS le gusta mantenerte alerta.
¿Por qué? Bueno, podría profundizar si hay interés.
¿Cuál será el resultado de este hechizo?
parseInt(null, 36)Dado que parseInt siempre coacciona la entrada a una cadena, null se convierte en la cadena "null".
En base 36 (hexatrigesimal, si llevas la cuenta), la cadena "null" representa 1112745.
Los valores secuenciales de nulk, null y nulm son respectivamente 1112744, 1112745 y 1112746 en base 36.
Tabla de Comparación
| Function | parseInt | parseFloat | Number | BigInt |
|---|---|---|---|---|
| Ignora espacios en blanco | ✅ | ✅ | ✅ | ✅ |
.map(FN) | ❌ | ☑️ | ✅ | ✅ |
| Admite argumento de base | ✅ | ❌ | ❌ | ❌ |
| Cadenas con prefijos binarios, octales o hexadecimales | Solo hexadecimal 0x; no infiere 0b/0o | ❌ | ✅ | ✅ |
Caracteres inválidos: 42 oh no | 42 | 42 | NaN | SyntaxError |
¿Cómo lo hiciste? 🧐
¿Necesitas un descanso después de tanto binario?
Primero las habilidades, luego el descanso.
¡Entra en mi gimnasio para superar más retos! 💪
