Skip to content Skip to sidebar Skip to footer

Why Does Python Change The Value Of An Integer When There Is A 0 In Front Of It?

I implemented a function converting an integer number to its representation as a string intToStr() (code below). For testing I've passed in some values and observed an unexpected o

Solution 1:

An integer literal starting with a 0 is interpreted as an octal number, base 8:

>>>01223
659

This has been changed in Python 3, where integers with a leading 0 are considered errors:

>>>01223
  File "<stdin>", line 1
    01223
        ^
SyntaxError: invalid token
>>>0o1223
659

You should never specify an integer literal with leading zeros; if you meant to specify an octal number, use 0o to start it, otherwise strip those zeros.

Solution 2:

As others have said that's because of octal numbers. But I strongly suggest you to change your function to:

>>>from functools import partial>>>force_decimal = partial(int, base=10)>>>force_decimal("01")
1
>>>force_decimal("0102301")
102301

This way you will explicitly force the conversion to base 10. And int wont be inferring it for you.

Solution 3:

Numbers that start with a 0 are interpreted as octal numbers. If it starts with 0x it's hexa decimal.

Solution 4:

A leading zero causes Python to interpret your number as octal (base-8).

To strip out the zeros (assuming num is a string), do:

num.lstrip("0")

Post a Comment for "Why Does Python Change The Value Of An Integer When There Is A 0 In Front Of It?"