Why Does Python Change The Value Of An Integer When There Is A 0 In Front Of It?
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?"