768

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

c次のPython2で浮動小数点数になるように強制するにはどうすればよいですか?

c = a / b
4

11 に答える 11

840

Python 2では、2つのintを除算するとintが生成されます。Python 3では、floatを生成します。からインポートすることで、新しい動作を取得できます__future__

>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
于 2009-08-12T18:28:26.193 に答える
738

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


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

于 2009-08-12T18:28:02.170 に答える
204

Pythonで除算を強制的に浮動小数点にするにはどうすればよいですか?

2 つの整数値 a と b がありますが、それらの比率を浮動小数点数にする必要があります。a < b であることはわかっており、a/b を計算したいので、整数除算を使用すると、a の余りで常に 0 になります。

次のPythonでcを強制的に浮動小数点数にするにはどうすればよいですか?

c = a / b

ここで本当に問われているのは次のことです。

a / b「分数を返すような真の除算を強制するにはどうすればよいですか?」

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

Python 3 では、真の除算を行うには、単純に を実行しますa / b

>>> 1/2
0.5

整数の古典的な除算動作であるフロア除算は、次のようになりました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 つを float に強制することです。堅牢なソリューションの 1 つがa / (b * 1.0). 新しい Python シェルで:

>>> 1/(2 * 1.0)
0.5

モジュールtruedivからも堅牢ですが、関数呼び出しであるため、これはおそらく遅くなります。operatoroperator.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

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

フラグを使用して Python を実行することもできますが-Qnew、これにはすべてのモジュールを新しい Python 3 の動作で実行するという欠点があり、一部のモジュールでは従来の分割が必要になる可能性があるため、テスト以外ではお勧めしません。しかし、実証するには:

$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
于 2015-09-18T17:29:08.573 に答える
136
c = a / (b * 1.0)
于 2009-08-12T18:26:57.507 に答える
66

Python 3.xでは、単一のスラッシュ(/)は常に真の(切り捨てられない)除算を意味します。(//演算子は除算の切り捨てに使用されます。)Python 2.x(2.2以降)では、次のように入力することで、これと同じ動作を得ることができます。

from __future__ import division

モジュールの上部にあります。

于 2009-08-12T18:30:30.433 に答える
31

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

例:

>>> 4.0/3
1.3333333333333333

また、

>>> 4 / 3.0
1.3333333333333333

また、

>>> 4 / float(3)
1.3333333333333333

また、

>>> float(4) / 3
1.3333333333333333
于 2010-09-24T06:22:39.360 に答える
15

This will also work

>>> u=1./5
>>> print u
0.2
于 2013-12-24T19:58:41.563 に答える
2
from operator import truediv

c = truediv(a, b)
于 2015-09-18T10:04:34.937 に答える
1
from operator import truediv

c = truediv(a, b)

ここで、a は被除数、b は除数です。この関数は、2 つの整数の除算後の商が float の場合に便利です。

于 2016-01-08T05:23:18.663 に答える