Why is a number in Scientific notation always read as a float
, and how can i convert a string like '1e400' to an int
(which is too large for a float
) ?
>>>int('1e400')
ValueError: invalid literal for int() with base 10: '1e400'
>>>int(float('1e400'))
OverflowError: cannot convert float infinity to integer
i know, i can make a function like:
def strtoint(string):
parts = string.split('e')
if len(parts) == 1:
return int(string)
elif len(parts) == 2:
if int(parts[1])<0:
return int(string)
return int(parts[0])*10**int(parts[1])
else:
return int(string) #raise a error if the string is invalid, but if the variable string is not a string, it may have other way to convert to an `int`
But this not a very pythonic way, is there a better way?
float
, while this question explicitly says it is not. – Ovulee
notation is always treated as a float, that's just because the syntax is defined that way. Nothing you can do to change it. – Ovuleint(2e6)
for example works great. – Ovule