JavaScript parseInt() bug

Discussion in 'JavaScript and AJAX' started by pradeep, Jun 2, 2006.

Tags:
  1. pradeep

    pradeep Team Leader

    Joined:
    Apr 4, 2005
    Messages:
    1,645
    Likes Received:
    87
    Trophy Points:
    0
    Occupation:
    Programmer
    Location:
    Kolkata, India
    Home Page:
    http://blog.pradeep.net.in
    There is a "bug" with the parseInt JavaScript function. The bug is not something that will affect you very often, but it is something you should be aware of. We've seen the bug in every browser except Opera.

    I've created a button to demonstrate the bug. The bug is that parseInt can return an incorrect value. For example, parseInt("08") results in 0 instead of 8. And parseInt("09") results in 0 instead of 9. The reason for this is because the zero in front is trying to tell the browser that this is an octal (base 8) number, and "08" and "09" are not valid octal numbers. The button below builds statements from parseInt("01") through parseInt("09") and shows what the resulting value is. But it also does parseFloat("01") through parseFloat("09"). This shows that the bug does not exist with parseFloat.

    Keep in mind that this bug only happens when the value being checked is a string and only when the string starts with a leading zero. So that's why it is difficult to notice. But if you're dealing with a web page that has user input, there's nothing prevening the user from entering 08 for a number field. To be 100% confident that you won't see the bug, use one of these two techniques:

    Code:
    parseInt(parseFloat(<my text value>))
     
     parseInt(<my text value>, 10)
     
    The "10" in the second example tells the browser that base-10 values should be used. Here is the button so you can see what's happening. The button puts up an alert box with the result of the "buildString" function, which is shown below:

    Code:
    function buildString() {
        var ret = "";
        for (var i=1; i<=9; i++) {
           // Build a statement like parseInt("0?") where ? varies from "1" to "9"
           fn = "parseInt(\"0" + i + "\")";
           // Evaluate the statement to get the result
           ret += fn + " = " + eval(fn) + "\n";
           // Do the same thing, except with parseFloat instead of parseInt
           fn = "parseFloat(\"0" + i + "\")";
           ret += fn + " = " + eval(fn) + "\n";
           // This time do parseInt but specify base 10.
           fn = "parseInt(\"0" + i + "\", 10)";
           ret += fn + " = " + eval(fn) + "\n\n";
        }
        return ret;
     }
     
     
  2. yayak

    yayak New Member

    Joined:
    Aug 30, 2007
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    there are other techniques, try these:
    Code:
    parseInt(<my text value>.replace(/^0+/g, ''));
       ex.: parseInt("08".replace(/^0+/g, ''));
    parseInt(<my text value> * 1);
       ex.: parseInt("08" * 1);
    
     
  3. pradeep

    pradeep Team Leader

    Joined:
    Apr 4, 2005
    Messages:
    1,645
    Likes Received:
    87
    Trophy Points:
    0
    Occupation:
    Programmer
    Location:
    Kolkata, India
    Home Page:
    http://blog.pradeep.net.in
    Good, but the techniques mentioned above are technically correct.
     
  4. bferronato

    bferronato New Member

    Joined:
    Sep 8, 2010
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    1.var number = "010";2.var integerNumber = parseInt(number, 10); //10 = base decimal (de 2 a 36)
    3.alert(integerNumber); //10
     
  5. bferronato

    bferronato New Member

    Joined:
    Sep 8, 2010
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    1.var number = "010";
    2.var integerNumber = parseInt(number, 10); //10 = base decimal (de 2 a 36)
    3.alert(integerNumber); //10
     
  6. Full Zip Hoody

    Full Zip Hoody New Member

    Joined:
    Sep 29, 2010
    Messages:
    20
    Likes Received:
    0
    Trophy Points:
    0
    Occupation:
    Programer
    Location:
    US of A
    i wonder when will java bee stable...
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice