Pythonの 'nn.nnnnn'という形式の文字列があり、それを整数に変換したいと思います。
直接変換が失敗します:
>>> s = '23.45678'
>>> i = int(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23.45678'
私はそれを使用して10進数に変換できます:
>>> from decimal import *
>>> d = Decimal(s)
>>> print d
23.45678
また、「。」で分割し、ゼロから小数を減算し、それを整数に加算することもできます...うん。
しかし、不必要な型変換や操作をせずに、intとして使用したいです。
これはどう?
>>> s = '23.45678'
>>> int(float(s))
23
または...
>>> int(Decimal(s))
23
または...
>>> int(s.split('.')[0])
23
それよりもずっと簡単になるとは思わない、怖い。それを受け入れて先に進みましょう。
どのような丸め動作が必要ですか? 2.67を3、または2にします。丸めを使用する場合は、次を試してください。
s = '234.67'
i = int(round(float(s)))
それ以外の場合は、次を実行します。
s = '234.67'
i = int(float(s))
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24
丸めたいかどうかは指定しません...
「変換」は、忠実度を失うことなく、あるデータ型から別のデータ型に変更する場合にのみ意味があります。文字列で表される数値は浮動小数点数であり、intに強制されると精度を失います。
代わりに、丸める必要があります(数値が通貨を表していないことを願っています。丸めがずっと複雑になるためです)。
round(float('23.45678'))
次を使用できます。
s = '23.245678'
i = int(float(s))
値を切り捨てる場合は、他の人が言及したint(float(s))
式が最適です。丸めアルゴリズムが必要なものと一致する場合はint(round(float(s))
を使用して丸めます( round documentation を参照)、そうでない場合はDecimal
とその丸めが使用される場合アルゴリズム。
round(float("123.789"))
整数値が得られますが、float型です。ただし、Pythonのアヒルの型付けでは、実際の型は通常あまり関係ありません。これにより、値が丸められますが、これは望ましくない場合があります。 'round'を 'int'に置き換えると、切り捨てられて実際のintになります。このような:
int(float("123.789"))
しかし、繰り返しますが、実際の「タイプ」は通常それほど重要ではありません。