Bug en parseInt de Javascript

Estabamos haciendo unos calculos con javascript, y para transformar un string a un valor para asegurarnos que la suma la hace correctamente nos hemos encontrado en un bug un tanto curioso en la funcion parseInt().

Resulta que todo funciona correcto excepto cuando la funcion tiene un 8 o un 9 a transformar, no sabe hacerlo, y devuelve un 0.

Para solucionarlo se debe multiplicar por 1:

var valor = 9;

alert(parseInt(valor));//devuelve 0
alert(parseInt(valor*1));//devuelve 9

Etiquetas: , , ,

5 comentarios para “Bug en parseInt de Javascript”

  1. erick dice:

    es verdad una proqueria por ejemplo trata de sumar dos numeros que tengan como decimales .2 y .6

    ejemplo:

    1.3 + 4.6

    devería dar 5.9
    pero el resultado que bota es : 5.8999999999999995

    … alguna solucion me siento cabreado con este resultado :P

  2. SKD_EBR dice:

    Es una estupidez…,

    No es un bug, parseInt de javascript toma su parametro como un número en base 8 (Octal), por lo que si intentas hacer parseInt(08) o parseInt(09), arrojará valores erroneos, para informar a parseInt que le daremos parametros en base 10, debemos hacer

    parseInt(x,10);

    Donde x puede ser cualquier número en base 10.

    Informarse bien es no apresurarnos a hablar estupideses.

  3. Raúl dice:

    Cuando parseInt() detecta un cero delante, interpreta que el sistema de numeración es octal; parece ser que en este caso, es el problema; de todas formas, si usais el segundo parámetro de parseInt(valor,sist_numeracion), donde sist_numeracion = 10, ya que estamos trabajando en decimal, no dará ningún problema.

  4. rjarl dice:

    Hola,
    No es un bug, mas bien es un comportamiento por defecto del lenguaje.

    parseInt en JavaScript espera dos parámetros, (numero, base), por ejemplo:

    var valor=9;
    alert(parseInt(9,10)) //<– En base 10 nos muestra un 9

    Esto funciona siempre bien si defines la base y te aseguro que si fuera un bug del lenguaje muchas aplicaciones online de banca estarían funcionando mal (te puedes imaginar).

    Mira, la documentación de mozilla lo explica fenomenal:
    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

    Saludos
    rjarl

  5. alete dice:

    levanto esto un segundo porque quiero saber, si tengo una cuenta regresiva 00:00:00 y quiero parsearla, me interesan solamente los segundos, cómo hago? base 60?

Deja un comentario

CAPTCHA Image Audio Version
Reload Image