私は2つの整数値a
とb
を持っていますが、浮動小数点でのそれらの比率が必要です。私はa < b
を知っています、そして私はa / b
を計算したいので、整数除算を使うならば私は常にa
の残りで0を得ます。
次のようにPythonでc
を浮動小数点数にするにはどうすればいいですか?
c = a / b
Python 2では、2つの整数を除算するとintが生成されます。 Python 3では、floatを生成します。 __future__
からインポートすることで新しい振る舞いを得ることができます。
>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
c = a / float(b)
を実行することでfloatにキャストできます。分子または分母が浮動小数点数の場合は、結果も同じになります。
警告:コメント投稿者が指摘したように、これはb
が整数または浮動小数点数(あるいはそれらを表す文字列)以外のものであるかもしれない場合はうまくいきません。他のタイプ(複素数など)を扱う場合は、それらをチェックするか別の方法を使用する必要があります。
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.truediv(a, b)
からのoperator
も堅牢ですが、これは関数呼び出しであるためおそらく遅くなります。
>>> 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
意図的にあなたのコードをもっと脆弱にすることは私にとってあまり意味がありません。
-Qnew
フラグを付けてPythonを実行することもできますが、これはすべてのモジュールを新しい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
浮動小数点数を示すためにドット(.
)を追加します
>>> 4/3.
1.3333333333333333
または
>>> from __future__ import division
>>> 4/3
1.3333333333333333
これも動作します
>>> u=1./5
>>> print u
0.2
デフォルトで "true"(浮動小数点)除算を使いたい場合は、コマンドラインフラグがあります。
python -Q new foo.py
(PEPから)いくつかの欠点があります。
デフォルトを変更するためのコマンドラインオプションは悪いと主張されてきました。たとえば、-Qnewを必要とするサードパーティのライブラリパッケージを-Qoldを必要とする別のライブラリパッケージと組み合わせることは不可能です。
Pythonのmanページを見れば、除算の振る舞いを変更/警告する他のflags値についてもっと学ぶことができます。
除算変更の詳細については、 PEP 238 - 除算演算子の変更 を参照してください。
あなたが2つの整数の除算をするなら、Pythonはあなたに整数を返すでしょう、そしてあなたはする必要があります:
c = float(a)/b
または
c = a/float(b)
そしてc
をfloat
型として取得します
from operator import truediv
c = truediv(a, b)
これも動作します
u = 1/5印刷する
0.2
13:13に回答しました19:58 Gaurav Agarwal 6,7172279140
Gaurawのおかげで、これはトリックを行い、非常にきちんとした解決策です。分子と分母の両方が変数の場合、「解」は1.に商を掛けたものになる可能性があります。
例:
aa = 2
bb = 3
aa / bb = 0
1. * aa / bb = 0.6666666666666666
;-)
マックス - イタリア
from operator import truediv
c = truediv(a, b)
ここで、aは被除数、bは除数です。この関数は、2つの整数の除算後の商がfloatの場合に便利です。