I tried performing following typecast operation in Python 3.3
int( 10**23 / 10 )
Output: 10000000000000000000000
And after in
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'>
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