Al convertir una cadena texto a numérico con la función de JavaScript parseInt existe un pequeño error cuando la cadena empieza por «0», por ejemplo:
[script]
siete = parseInt(«7») // nos devuelve 7
sieteb = parseInt(«07») // nos devuelve 7ocho = parseInt(«8») // nos devuelve 8
ochob = parseInt(«08») // nos devuelve 0 !!nueve = parseInt(«9») // nos devuelve 9
nueveb = parseInt(«09») // nos devuelve 0 !![/script]
Este error afecta tanto a JavaScript como a JScript(asp) y parece ser que al comenzar la cadena por «0» cambia a base Octal dando «0» al convertir 8 y 9 que no existen en esa base. El problema es bastante significativo al tratar fechas estilo dd/mm/aaaa, descomponer dicha cadena en día, mes y año para después convertirla en número. De esta manera Agosto y Septiembre («08» y «09») serían 0 en vez de 8 y 9.
La solución es añadir la base en la que debe trabajar la función parseInt. Para ello basta con añadir «10» a la función de la siguiente manera:
[script]
ocho = parseInt(«08»,10) // Ahora devuelve 8, quedando definitivamente solucionado este «Bug»
[/script]
el comamdo correcto es:
parseInt(s, [base])
Nunca lo habia utilizado solo con la cadena a convertir. Creo que es una casualidad que funcione hasta el numero 7.
No es una casualidad que funcione hasta el 7. Los números en base 10 y en base 8 tienen la misma representación hasta el 7.
Si no es por este blog, hubiera muerto tratando de encontrar la solución. Mil gracias, estos son los aportes que valen la pena.
Casualmente me he encontrado con este numero 0648000184632 que me lo convierte en un 52. Añadiendo el segundo parametro, 10, ha quedado solucionado.
Deduzco que se debe a los numeros que empiezan por 0.
Gracias por el aporte, me ué de mucha ayuda
gracias, ya me estaba rompiendo a cabeza jajaja
gracias ya no sabia q hacer 😛
applause!
muchas gracias!!
Increible… vaya bug!!!!!!
Muchísimas gracias, me estaba volviendo loco…
Gracias por solucionar mi problema
Hola.
No es un bug de la función javascript, es un error del programador que no se ha leido como se usa la función parseInt de javascript y no sabe como funciona jeje.
La explicación es tan sencilla como la siguiente:
parseInt tiene como parámetros una cadena (la que se va a convertir) y la base que es la que se usa para convertir el numero y que es opcional.
Y aqui viene la historia:
1º- Si no se especifica el parámetro base, y la cadena a convertir empieza por 0x, la función convierte la cadena a un número en base HEXADECIMAL.
2º- Si no se especifica el parámetro base, y la cadena a convertir empieza por 0, la función convierte la cadena a un número en base OCTAL.
Por eso
ochob = parseInt(”08″) // nos devuelve 0 (normal porque en base octal no hay 8 xD).
3º – En el resto de los casos si no se especifica el parámetro base, convierte a base DECIMAL.
Eso es todo, no se trata de ningun bug ! 😉
Desde mi experiencia no os recomiendo el uso de la función parseInt ya que su funcionalidad a veces no es la deseada:
1. Retornará un número válido si: El String empieza por un número.
2. El String empieza por espacio(s) seguido de un número.
* Ejemplos de números válidos: «123456»
* » 123456″
* «12345asdasd»
* » 12345 asdd»
3. Todo String que cumpla con las 2 reglas anteriores (ser un número válido), será truncado: cuando se encuentre una letra, espacio o caracteres especiales (comas, acentos,…) dentro del String. Como resultado, retornará los dígitos que estén más a la izquierda de la primera letra (espacio o caracter) encontrada.
* Ejemplos de números válidos truncados: «123456» retorna como resultado 123456
* » 123456″ retorna como resultado 123456
* «12345asdasd» retorna como resultado 12345
* » 123.. asdd» retorna como resultado 123