La función parseFloat() de Javascript nos permite recoger un dato de tipo string y convertirlo en un número con decimales, mientras que la función parseInt() nos devuelve un entero. ¿Así de simple? Sí, pero con matices. Vamos a profundizar un poco:
En el caso de parseInt() se trata de una función que recibe dos valores: el primero es obligatorio y es la cadena que queremos convertir a entero, el segundo sería un entero entre 2 y 36 para definir la base en que queremos que esté representado el entero devuelto, y es un parámetro opcional que por defecto tomará el valor 10 (base decimal). En implementaciones en navegadores antiguos (por ejemplo IE8) si el número empieza por 0 lo devolverá en base octal, así que ojo. Con los navegadores modernos ya no pasa, pero es importante recordarlo. Si le pasamos una cadena con espacios los obviará y devolverá el número (si hay varios números devolverá el primero que se encuentre). Si le pasamos una cadena con letras y números dependerá de la posición del número: si este está al inicio entonces devolverá el número hasta que encuentre un caracter extraño. Si empieza por letras devolverá un valor NaN. Ejemplos:
parseInt("10"); //devuelve 10 parseInt("10 años"); //devuelve 10 parseInt("10 54"); //devuelve 10 parseInt("10.50"); //devuelve 10 parseInt("casi 10"); //devuelve NaN parseInt("10",16); //devuelve 16
Si quieres evitar problemas y que te devuelva un 0 cuando el resultado sea NaN ya te lo contamos en su día por aquí.
En el caso de parseFloat() la función sólo recibe la cadena que debe convertir a número decimal. Al igual que parseInt() si recibe una cadena con espacios los ignorará para devolver el número, y si recibe una cadena con caracteres actuará también igual que esa función: si este está al inicio entonces devolverá el número hasta que encuentre un caracter extraño. Si empieza por letras devolverá un valor NaN. En este caso ojo al formato numérico, sólo acepta el anglosajón. Es decir, el separador decimal tiene que ser un punto, interpretará la una coma como un caracter extraño.
parseFloat("10"); //devuelve 10 parseFloat("10.5 años"); //devuelve 10.5 parseFloat("10 54"); //devuelve 10 parseFloat("10.50"); //devuelve 10.50 parseFloat("casi 10.4"); //devuelve NaN parseFloat("1.000,33"); //devuelve 1 parseFloat("10,50"); //devuelve 10
Entonces ¿qué hago si tengo una cadena donde los decimales vienen separados por comas y los miles marcados con puntos? Pues usando la función replace(). Vamos con un ejemplo:
var strEx = "1.000,33"; //primer paso: fuera puntos strEx = strEx.replace(".",""); //cambiamos la coma por un punto strEx = strEx.replace(",","."); //listo var numFinal = parseFloat(strEx);
Podría ser útil tener una función creada ya para realizar esta operación de conversión.
Y hasta aquí con esta entrada de Javascript básico.
Maravilloso y tan simple. Saludos
Muy útil la información!
gracias doctor, me ha salvado de este enredo
Increíble, gracias funciona todo sin problema