2つの整数値a
とb
がありますが、浮動小数点での比率が必要です。私はそれを知っていてa < b
、計算したいa / b
ので、整数除算を使用すると、余りは常に0になりますa
。
c
次のPython2で浮動小数点数になるように強制するにはどうすればよいですか?
c = a / b
2つの整数値a
とb
がありますが、浮動小数点での比率が必要です。私はそれを知っていてa < b
、計算したいa / b
ので、整数除算を使用すると、余りは常に0になりますa
。
c
次のPython2で浮動小数点数になるように強制するにはどうすればよいですか?
c = a / b
Python 2では、2つのintを除算するとintが生成されます。Python 3では、floatを生成します。からインポートすることで、新しい動作を取得できます__future__
。
>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
を実行すると、フロートにキャストできますc = a / float(b)
。分子または分母が浮動小数点数の場合、結果も浮動小数点数になります。
警告:コメント投稿者が指摘しているようにb
、整数または浮動小数点数(または1つを表す文字列)以外のものである可能性がある場合、これは機能しません。他のタイプ(複素数など)を扱っている可能性がある場合は、それらをチェックするか、別の方法を使用する必要があります。
Pythonで除算を強制的に浮動小数点にするにはどうすればよいですか?
2 つの整数値 a と b がありますが、それらの比率を浮動小数点数にする必要があります。a < b であることはわかっており、a/b を計算したいので、整数除算を使用すると、a の余りで常に 0 になります。
次のPythonでcを強制的に浮動小数点数にするにはどうすればよいですか?
c = a / b
ここで本当に問われているのは次のことです。
a / b
「分数を返すような真の除算を強制するにはどうすればよいですか?」
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 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 との上位互換性を確保できるため、本当に最適なソリューションです。
これをモジュール全体に適用したくない場合は、いくつかの回避策に限定されます。最も一般的なのは、オペランドの 1 つを float に強制することです。堅牢なソリューションの 1 つがa / (b * 1.0)
. 新しい Python シェルで:
>>> 1/(2 * 1.0)
0.5
モジュールtruediv
からも堅牢ですが、関数呼び出しであるため、これはおそらく遅くなります。operator
operator.truediv(a, b)
>>> from operator import truediv
>>> truediv(1, 2)
0.5
よく見られるのは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
c = a / (b * 1.0)
Python 3.xでは、単一のスラッシュ(/
)は常に真の(切り捨てられない)除算を意味します。(//
演算子は除算の切り捨てに使用されます。)Python 2.x(2.2以降)では、次のように入力することで、これと同じ動作を得ることができます。
from __future__ import division
モジュールの上部にあります。
浮動小数点形式で除算用のパラメーターを作成するだけで、出力も浮動小数点で生成されます。
例:
>>> 4.0/3
1.3333333333333333
また、
>>> 4 / 3.0
1.3333333333333333
また、
>>> 4 / float(3)
1.3333333333333333
また、
>>> float(4) / 3
1.3333333333333333
This will also work
>>> u=1./5
>>> print u
0.2
from operator import truediv
c = truediv(a, b)
from operator import truediv
c = truediv(a, b)
ここで、a は被除数、b は除数です。この関数は、2 つの整数の除算後の商が float の場合に便利です。