votarError en parseInt de JavaScript y JScript

18 agosto 2007 – 2:14    

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 7 

ocho = 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]  

  1. 12 Comentarios en “Error en parseInt de JavaScript y JScript”

  2. 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.

    Por Cristian el 15/12/2007

  3. 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.

    Por Amkhara el 07/05/2008

  4. Si no es por este blog, hubiera muerto tratando de encontrar la solución. Mil gracias, estos son los aportes que valen la pena.

    Por Felixonca el 26/06/2008

  5. 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.

    Por NRG el 07/07/2008

  6. Gracias por el aporte, me ué de mucha ayuda

    Por Marino el 25/07/2008

  7. gracias, ya me estaba rompiendo a cabeza jajaja

    Por dach el 30/10/2008

  8. gracias ya no sabia q hacer :P

    Por Petter02 el 28/11/2008

  9. applause!

    muchas gracias!!

    Por jorge el 03/12/2008

  10. Increible… vaya bug!!!!!!

    Muchísimas gracias, me estaba volviendo loco…

    Por Jesus el 10/03/2009

  11. Gracias por solucionar mi problema

    Por Fabian Altamirano el 16/03/2009

  12. 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 ! ;)

    Por Carlos el 02/04/2009

  13. 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

    Por TARUGO el 15/11/2010

Enviar un Comentario