Typecasting to 'int' in Python generating wrong result

前端 未结 2 948
庸人自扰
庸人自扰 2021-01-19 07:34

I tried performing following typecast operation in Python 3.3

int( 10**23 / 10 )

Output: 10000000000000000000000

And after in

相关标签:
2条回答
  • You are doing floating-point division with the / operator. 10**24/10 happens to have an inexact integer representation.

    If you need an integer result, divide with //.

    >>> type(10**24/10)
    <class 'float'>
    >>> type(10**24//10)
    <class 'int'>
    
    0 讨论(0)
  • 2021-01-19 07:54

    In Python 3.x, / always does true(floating point) division. Using floor division // instead could give you the expected result.

    >>> int(10**25 // 10)
    1000000000000000000000000
    

    The reason of this behavior is that float can't store big integers precisely.

    Assuming IEEE-754 double precision is used, it can store integers at most 253 precisely, which is approximitely 1016. Another example:

    >>> int(10**17 / 10 + 1)
    10000000000000000
    
    0 讨论(0)
提交回复
热议问题