Could someone explain why I can not use int()
to convert an integer number represented in string-scientific notation into a python int
?
For
Behind the scenes a scientific number notation is always represented as a float internally. The reason is the varying number range as an integer only maps to a fixed value range, let's say 2^32
values. The scientific representation is similar to the floating representation with significant and exponent. Further details you can lookup in https://en.wikipedia.org/wiki/Floating_point.
You cannot cast a scientific number representation as string to integer directly.
print int(1e1) # Works
Works because 1e1
as a number is already a float.
>>> type(1e1)
<type 'float'>
Back to your question: We want to get an integer from float or scientific string. Details: https://docs.python.org/2/reference/lexical_analysis.html#integers
>>> int("13.37")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '13.37'
For float or scientific representations you have to use the intermediate step over float
.
Very Simple Solution
print(int(float(1e1)))
Steps:- 1- First you convert Scientific value to float. 2- Convert that float value to int . 3- Great you are able to get finally int data type.
Because in Python (at least in 2.x since I do not use Python 3.x), If you input a string, then python will try to parse it to base 10 int()
behaves differently on strings and numeric values.int
int ("077")
>> 77
But if you input a valid numeric value, then python will interpret it according to its base and type and convert it to base 10 int. then python will first interperet 077
as base 8 and convert it to base 10 then int()
will jsut display it.
int (077) # Leading 0 defines a base 8 number.
>> 63
077
>> 63
So, int('1e1')
will try to parse 1e1
as a base 10 string and will throw ValueError
. But 1e1
is a numeric value (mathematical expression):
1e1
>> 10.0
So So Python will first interpret 1e1 since it was a numric value and evaluate int
will handle it as a numeric value and handle it as though, converting it to float(10.0)
and then parse it to int.10.0
and int()
will convert it to integer.
So calling int()
with a string value, you must be sure that string is a valid base 10 integer value.