web-dev-qa-db-ja.com

Pythonで小数を含む整数に文字列を変換します

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として使用したいです。

51
Matt Hampel

これはどう?

>>> s = '23.45678'
>>> int(float(s))
23

または...

>>> int(Decimal(s))
23

または...

>>> int(s.split('.')[0])
23

それよりもずっと簡単になるとは思わない、怖い。それを受け入れて先に進みましょう。

103

どのような丸め動作が必要ですか? 2.67を3、または2にします。丸めを使用する場合は、次を試してください。

s = '234.67'
i = int(round(float(s)))

それ以外の場合は、次を実行します。

s = '234.67'
i = int(float(s))
13
Dan Lorenc
>>> s = '23.45678'
>>> int(float(s))
23
>>> int(round(float(s)))
23
>>> s = '23.54678'
>>> int(float(s))
23
>>> int(round(float(s)))
24

丸めたいかどうかは指定しません...

3
Kevin Little

「変換」は、忠実度を失うことなく、あるデータ型から別のデータ型に変更する場合にのみ意味があります。文字列で表される数値は浮動小数点数であり、intに強制されると精度を失います。

代わりに、丸める必要があります(数値が通貨を表していないことを願っています。丸めがずっと複雑になるためです)。

round(float('23.45678'))
2
JosefAssad

次を使用できます。

s = '23.245678'
i = int(float(s))
1
gbc

値を切り捨てる場合は、他の人が言及したint(float(s))式が最適です。丸めアルゴリズムが必要なものと一致する場合はint(round(float(s))を使用して丸めます( round documentation を参照)、そうでない場合はDecimalとその丸めが使用される場合アルゴリズム。

1
Kathy Van Stone
round(float("123.789"))

整数値が得られますが、float型です。ただし、Pythonのアヒルの型付けでは、実際の型は通常あまり関係ありません。これにより、値が丸められますが、これは望ましくない場合があります。 'round'を 'int'に置き換えると、切り捨てられて実際のintになります。このような:

int(float("123.789"))

しかし、繰り返しますが、実際の「タイプ」は通常それほど重要ではありません。

0
rledley