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? 🤓
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.)
¿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)).
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! 💪
