Why does Python change the value of an integer when there is a 0 in front of it?

前端 未结 4 360
眼角桃花
眼角桃花 2021-01-14 18:14

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

相关标签:
4条回答
  • 2021-01-14 18:52

    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.

    0 讨论(0)
  • 2021-01-14 19:00

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

    0 讨论(0)
  • 2021-01-14 19:08

    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.

    0 讨论(0)
  • 2021-01-14 19:09

    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")
    
    0 讨论(0)
提交回复
热议问题