[Python] 除算を浮動小数点にするにはどうすればよいですか? 部門は0に丸め続けます



Answers

c = a / float(b)実行してfloatにキャストできます。 分子または分母が浮動小数点数の場合、結果も同じになります。

警告:コメント者が指摘しているように、 bが整数または浮動小数点数(またはそれを表す文字列)以外の場合、これは機能しません。 他のタイプ(複素数など)を扱っている場合は、それらをチェックするか、別の方法を使用する必要があります。

Question

私は2つの整数値abを持っていますが、浮動小数点でそれらの比率が必要です。 私はa<bを知ってa<bので、 a/bを計算a/bたいので、整数除算を使うと、aの残りの部分は常に0になります。

どのようにして、 cを次のようにPythonの浮動小数点数にすることができますか?

c = a / b



2つの整数の除算を行う場合、Pythonは整数を返します。すると次のようになります。

c = float(a)/b

または

c = a/float(b)

float型としてcを取得する




これも動作します

>>> u=1./5
>>> print u

0.2




分割を強制的に浮動小数点にする方法はありますか?

私は2つの整数値aとbを持っていますが、浮動小数点でそれらの比率が必要です。 私はa <bを知っているので、a / bを計算したいので、整数除算を使うと、aの残りの部分は常に0になります。

どのようにして、cを次のようにPythonの浮動小数点数にすることができますか?

c = a / b

本当にここで尋ねられるのは、

a / bが小数点以下を返すように真の除算をどのように強制するのですか?」

Python 3にアップグレードする

Python 3では、真の分割を得るために、単にa / bます。

>>> 1/2
0.5

整数の古典的な除算動作であるFloor divisionは、現在a // b

>>> 1//2
0
>>> 1//2.0
0.0

しかし、Python 2を使用している場合や、2と3の両方で動作する必要のあるコードを記述している可能性があります。

Python 2を使用している場合

Python 2では、それほど単純ではありません。 古典的なPython 2ディビジョンを扱ういくつかの方法は、他のものより優れていて堅牢です。

Python 2の推奨事項

特定のモジュールでPython 3ディビジョンビヘイビアを得ることができます。

from __future__ import division

Python 3スタイルの分割をモジュール全体に適用します。 また、任意の時点でPythonシェルで動作します。 Python 2では:

>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0

これは本当にあなたのモジュール内のコードがPython 3とより順方向に互換性があることを保証するので、最高の解決策です。

Python 2のその他のオプション

これをモジュール全体に適用したくない場合は、いくつかの回避策に限定されます。 最も一般的なのは、オペランドの1つを浮動小数点に強制することです。 1つのロバストな解はa / (b * 1.0)です。 新しいPythonシェルでは:

>>> 1/(2 * 1.0)
0.5

また、 operatorモジュールoperator.truediv(a, b)からは堅牢ですが、これは関数呼び出しのために遅い可能性があります:

>>> from operator import truediv
>>> truediv(1, 2)
0.5

Python 2ではお勧めできません

一般的に見られるのはa / float(b)です。 これは、bが複素数である場合にTypeErrorを発生させます。 複素数による除算が定義されているので、除数に複素数を渡すと除算に失敗しないようにすることは意味があります。

>>> 1 / float(2)
0.5
>>> 1 / float(2j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float

意図的にコードを脆弱にすることは、私にはあまり意味がありません。

-Qnewフラグを付けてPythonを実行することもできますが、これは新しいPython 3の動作ですべてのモジュールを実行するという欠点があり、モジュールの中には古典的な除算が予想されることがあるので、テスト以外はこれをおすすめしません。 しかし、実証するには:

$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j



from operator import truediv

c = truediv(a, b)

aは被除数、bは除数である。 この関数は、2つの整数の除算後の商が浮動小数点の場合に便利です。




浮動小数点形式で除算するためのパラメータを作成するだけでも、浮動小数点で出力が生成されます。

例:

>>> 4.0/3
1.3333333333333333

または、

>>> 4 / 3.0
1.3333333333333333

または、

>>> 4 / float(3)
1.3333333333333333

または、

>>> float(4) / 3
1.3333333333333333



Links