Error en parseInt de JavaScript y JScript

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]  

12 pensamientos en “Error en parseInt de JavaScript y JScript

  1. Cristian

    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.

  2. Amkhara

    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.

  3. Felixonca

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

  4. NRG

    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.

  5. Carlos

    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 ! 😉

  6. TARUGO

    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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.