Trabajando con números (I)
El trabajo con números, o matemático es muy importante en cualquier lenguaje de programación ya que nos permite hacer cosas que no creíamos, es por ello que vamos a dedicarle algunas entradas para aprender a manejarlos, aunque ya aprendimos las operaciones básicas en una entrada anterior basada en operadores.
En esta ocasión vamos a sacar el máximo partido del aparato matemático de JavaScript viendo como se trata de algo muy sencillo y si os pasa como a mí (me he pagado la carrera a base de clases particulares de matemáticas), os resultará hasta divertido…
Números
Vamos a comenzar desde prácticamente el principio, de modo que debemos diferenciar entre lo que es un número entero (5) y uno decimal (5.8) ya que en JS los números decimales se marcan con un punto (.) Aunque a la hora de diferenciarlos para declararlos no hay que hacer nada, JS los reconoce y trabaja con ellos, no hay que decirle de que tipo son como en otros lenguajes de programación.
var x = 5; //número entero var y = 5.8; //número con coma var v = 123e5; //12300000 var z = 123e-5; //0.00123
Como vemos en la declaración de variables de arriba podemos utilizar notación científica utilizando e como 10 elevado a
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, como por ejemplo
var x = 0.2 + 0.1; //da como resultado 0.30000000000000004
Lo cual es algo sorprendente, pero afortunadamente puede arreglarse 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.
var x = (0.2 * 10 + 0.1 * 10) / 10; //el resultado ahora sí es 0.3
Sistemas de representación de números
De forma predeterminada JS presenta los números en la base decimal, pero se pueden utilizar otras bases, por ejemplo la hexadecimal:
var x = 0xFF; //este valor es 255
Pero supongamos que queremos hacer un cambio de base o presentar los valores en otras bases, para ello se utiliza el método toString() que veremos más adelante pero que ahora nos puede servir para entender el siguiente ejemplo:
var myNumber = 128; myNumber.toString(16); // (hexadecimal)devuelve 80 myNumber.toString(8); // (octal)devuelve 200 myNumber.toString(2); // (binario)devuelve 10000000
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. En ese momento aparecerán los valores Infinity y -Infinity
var x = 3/0; // Infinity var x = -3/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…
var x = 5*'rueda'; //el resultado es NaN
No obstante si la cadena puede interpretarse como un valor, JS lo hará y realizará la operación
var x = 5*'10'; //el resultado es 50
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.
var x = 5*'rueda'; isNaN(x); //el resultado en este caso sería true
Números como objetos
Aunque aun no hemos hablado demasiado de objetos, es interesante saber que los números pueden ser creados como valores primitivos (como explicamos en esta entrada) o bien como objetos y aunque se pueden hacer muchas operaciones combinando las dos formas vamos a ver sus semejanzas y diferencias…
var x = 123; var y = new Number(123); //typeOf x devuelve number //typeOf y devuelve object
Cuando creamos números como objetos ralentizamos la velocidad de nuestra aplicación y aunque utilicemos el comparador de igualdad == y nos de que son iguales, el de operador === nos devuelve true por que aunque en este caso el valor es el mismo entre x e y no son del mismo tipo. Pero es aun peor, ya que los objetos no se pueden comparar entre si…
Con esto terminamos la primera parte dedicada a los números, en la siguiente entrada estudiaremos los métodos numéricos que tiene Javascript