Los números en JavaScript
Trabajar con números es esencial en cualquier lenguaje de programación, y en JavaScript su tratamiento es algo especial, es por eso que vamos a dedicarles un tiempo para aprender a manejarlos, aunque las operaciones básicas con operadores aritméticos se explican por sí mismas.
Vamos a ver el aparato matemático de JavaScript viendo como se trata de algo muy sencillo.
Los números
Comencemos desde el principio, debemos diferenciar entre lo que es un número entero (positivo como 5, o negativo como -3) y uno real, con decimales (como 7.81, o como -29.3) ya que en JS los números decimales se marcan con un punto (.). De forma predeterminada JS presenta los números en base 10 (decimal), pero se pueden utilizar otras bases, la base 16 (hexadecimal), la base 8 (octal) o la base 2 (binaria).
Aunque a la hora de diferenciarlos para declararlos no hay que hacer nada, JS los reconoce y trabaja con ellos, es decir, no hay que decirle de que tipo son como en otros lenguajes de programación que diferencian entre enteros cortos y largos y reales cortos y largos y hay que indicarlo expresamente antes de poder usarlos.
var x = 7; // número entero
var y = 7.8; // número real (decimal)
var z = 123e4; // 1230000
var n = 456e-5; // 0.00456
Como vemos en la declaración de variables de arriba podemos utilizar notación científica utilizando e como 10 elevado a n. Todo esto es muy interesante pero JS tiene un problema con los números y es que esta limitado a números enteros con 15 dígitos y a 17 decimales, pero eso no es todo en ocasiones las operaciones con números decimales pueden dar errores incomprensibles, como por ejemplo:
-> 0.1+0.7 // 0.7999999999999999
-> 0.1+0.2 // 0.30000000000000004
Lo cual es algo sorprendente, pero afortunadamente puede arreglarse (aunque no es la solución) si anulamos los decimales y jugamos un poco con los números, por ejemplo, en el ejemplo anterior bastaría con multiplicar por 10 cada factor y después de realizar la operación dividir entre 10. Ya que los errores no se cometen con números enteros.
El infinito
Cuando estamos trabajando con números es bastante común que obtengamos el resultado infinito cuando se realizan algunas operaciones como en las divisiones entre cero, o cuando estamos utilizando números muy grandes o muy pequeños (exponentes de 10 superiores a 300). En ese momento aparecerán los valores Infinity y -Infinity.
-> +5/0 // +Innfinity
-> -8/0 // -Infinity
NaN
Bajo estas siglas se esconde el famoso Not a Number que aparece cuando hacemos una operación con elementos que no son números…
-> 7 * 'casa' // NaN
-> 9 + '3' // 93 porque concatena
-> 9 * '3' // 27 convierte a número la cadena '3'
-> '' + 7 // '7'
-> '' + 7 * 5 // '35'
-> 7 +''*5 // 7
No obstante si la cadena puede interpretarse como un valor, JS lo hará y realizará la operación. De este modo se puede identificar por medio de la función isNaN() si nuestro valor es o no un número, devolviendo true en caso de que no sea un número y false en caso de que sí lo sea.
Conversión de variables a números
Existen una serie de métodos globales de JS que nos servirán para nuestro proposito de convertir variables a números, éstos son:
parseInt() y parseFloat()
Analiza una cadena y devuelve el valor del primer número que encuentre, aunque permite espacios en blanco:
parseInt(8.32) // 8
parseInt('8.32') // 8
parseInt('8.32 mesa') // 8
parseInt('mesa 8.32') // NaN
parseInt('8.32 75 1.236') // 8
parseInt('75 8.32 1.236') // 75
parseFloat(2.035) // 2.035
parseFloat('2.035') // 2.035
parseFloat(' 2.035') // 2.035
parseFloat('2.035 casa') // 2.035
parseFloat('casa 2.035') // NaN
parseFloat('2.035 3.6 200') // 2.035
parseFloat('78 2.035 3.6 200') // 78
number()
Se utiliza para convertir variables a números de forma muy simple:
Number(true) // 1
Number(false) // 0
Number(10) // 10
Number(10.037) // 10.037
Number('10.037') // 10.037
Number('25 78') // NaN
Number('25 casa') // NaN
Number(new Date()) // 1522238853606 milisegundos desde 1/1/1970
Métodos numéricos
toString()
Convierte un número en una cadena
let x = 234.7
x.toString() // '234.7'
toExponential()
Devuelve un número en notación científica
x = 789456
x.toExponential() // "7.89456e+5"
x.toExponential(2) // "7.89e+5"
x.toExponential(3) // "7.895e+5"

