2016-03-18 84 views
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化的方式,有沒有更好的辦法?

+0

可能的重複http://stackoverflow.com/questions/32861429/converting-number-in-scientific-notation-to-int? – snakecharmerb

+1

@scharcharmerb這個問題的答案都假設數字在'float'的範圍內,而這個問題明確表明它不是。 –

+0

至於爲什麼'e'符號總是被當作一個float,這只是因爲語法是這樣定義的。沒有辦法改變它。 –

回答

8

也許你可以在轉換爲int之前使用Decimal作爲中間類型。

>>> import decimal 
>>> decimal.Decimal("1e400") 
Decimal('1E+400') 
>>> int(decimal.Decimal("1e400")) 
10000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
00000000000000000000000000000000000000000000000000000000000000000000000000000000 
0 
相關問題