私は2つの整数値a
とを持っていますb
が、浮動小数点での比率が必要です。私はそれを知っていてa < b
、計算したいa / b
ので、整数除算を使用すると、常にの余りで0になりますa
。
c
次のようにPythonで浮動小数点数になるように強制するにはどうすればよいですか?
c = a / b
私は2つの整数値a
とを持っていますb
が、浮動小数点での比率が必要です。私はそれを知っていてa < b
、計算したいa / b
ので、整数除算を使用すると、常にの余りで0になりますa
。
c
次のようにPythonで浮動小数点数になるように強制するにはどうすればよいですか?
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
from __future__ import division
ファイルの最初にある必要があることに注意してください
//
床の分割/
が必要な場合、および「true」(float
)の分割が必要な場合にのみ使用します。
フロートにキャストすることができc = a / float(b)
ます。分子または分母が浮動小数点の場合、結果も同様です。
注意:コメンターが指摘したように、これはb
整数または浮動小数点数(または1を表す文字列)以外の場合は機能しません。他の型(複素数など)を処理する可能性がある場合は、それらを確認するか、別の方法を使用する必要があります。
Pythonで除算を強制的に浮動小数点にするにはどうすればよいですか?
私は2つの整数値aとbを持っていますが、それらの比率を浮動小数点で必要としています。a <bであることを知っているので、a / bを計算したいので、整数除算を使用すると、常に0になり、残りはaになります。
次のように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つを浮動小数点数に強制変換することです。堅牢なソリューションの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
意図的にコードをよりもろくすることは、私にはあまり意味がありません。
-Qnew
フラグを使用してPythonを実行することもできますが、これにはすべてのモジュールを新しいPython 3の動作で実行することの欠点があり、一部のモジュールは従来の除算を想定している可能性があるため、テスト以外はお勧めしません。しかし、実証するために:
$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
除算のパラメーターを浮動小数点形式で作成するだけでも、出力は浮動小数点形式で生成されます。
例:
>>> 4.0/3
1.3333333333333333
または、
>>> 4 / 3.0
1.3333333333333333
または、
>>> 4 / float(3)
1.3333333333333333
または、
>>> float(4) / 3
1.3333333333333333
1.0 + 1/3
たり、float(c) + a/b
あるいはそうしたりするfloat(a/b)
と、答えに失望するでしょう。__future__.division
常に期待する答えを得るには、python 3+を使用するか、モジュールをインポートする(受け入れられた回答を参照)方が適切です。既存の除算規則は、潜行性があり、追跡が難しい数学エラーを作成します。
python -c 'a=10; b=3.0; print a/b'
か?
a
'b'の場合、例えば整数値関数の出力はどうでしょうか?例えば、a = len(list1), b = len(list2)
。
float(..)
。1.0
@Pinochleが以下に示すように、を乗算することも役立つと思います。
ドット(.
)を追加して浮動小数点数を示します
>>> 4/3.
1.3333333333333333
float()
、変数の1つだけを使用します。
これも機能します
>>> u=1./5
>>> print u
0.2
a
との回答が必要ですb
。
./
には浮動小数点除算を行うことができるPythonの有効な演算子だと思っていました。これが、どのプログラミング言語でもホワイトスペースを慎重に使用するのが良い理由です
デフォルトで「true」(浮動小数点)除算を使用する場合は、コマンドラインフラグがあります。
python -Q new foo.py
(PEPからの)いくつかの欠点があります。
デフォルトを変更するコマンドラインオプションは悪だと主張されてきました。これは間違いなく危険です。たとえば、-Qnewを必要とするサードパーティのライブラリパッケージと-Qoldを必要とする別のライブラリパッケージを組み合わせるのは不可能です。
python manページを見ると、除算の動作を変更/警告する他のフラグ値について詳しく知ることができます。
部門変更の詳細については、PEP 238-部門オペレーターの変更をご覧ください。
from operator import truediv
c = truediv(a, b)
a
がintおよびb
floatの場合は機能しないため、これは理想的ではありません。同じ方法でより良い解決策は、を実行from operator import truediv
してから使用することtruediv(a, b)
です。