5
Почему число в научной нотации всегда читается как float
, и как я могу преобразовать строку типа «1e400» в int
(что слишком велико для float
)?Почему 1e400 не является int?
>>>int('1e400')
ValueError: invalid literal for int() with base 10: '1e400'
>>>int(float('1e400'))
OverflowError: cannot convert float infinity to integer
я знаю, что я могу сделать такую функцию:
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`
, но это не очень вещий образом, есть лучший способ?
Возможный дубликат http://stackoverflow.com/questions/32861429/converting-number-in-scientific-notation-to-int? – snakecharmerb
@snakecharmerb ответы на этот вопрос все предполагают, что число находится в пределах диапазона 'float', в то время как этот вопрос явно говорит, что это не так. –
Что касается того, почему 'e' обозначение всегда рассматривается как float, это просто потому, что синтаксис определен таким образом. Вы ничего не можете изменить, чтобы изменить его. –