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'表記法が常に浮動小数点として扱われるかは、構文がそのように定義されているからです。それを変更するために何もできません。 –