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`
但是,這並不是一個非常Python化的方式,有沒有更好的辦法?
可能的重複http://stackoverflow.com/questions/32861429/converting-number-in-scientific-notation-to-int? – snakecharmerb
@scharcharmerb這個問題的答案都假設數字在'float'的範圍內,而這個問題明確表明它不是。 –
至於爲什麼'e'符號總是被當作一個float,這只是因爲語法是這樣定義的。沒有辦法改變它。 –