一方を他方に使用することに利点はありますか? Python 2では、どちらも同じ結果を返すようです。
>>> 6/3
2
>>> 6//3
2
Python 3.0では、5 / 2
は2.5
を返し、5 // 2
は2
を返します。前者は浮動小数点除算、後者はフロア除算で、整数除算とも呼ばれます。
Python 2.2以降の2.x行では、from __future__ import division
を実行しない限り整数に違いはありません。これにより、Python 2.xは3.0の動作を採用します。
将来のインポートに関係なく、5.0 // 2
は2.0
を返します。これは、操作のフロア分割の結果だからです。
詳細な説明は https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator にあります。
これはPython 2.xの行を明確にするのに役立ちます、/
はフロア区分でも真の区分でもありません。現在受け入れられている答えはこれに関してはっきりしていません。両方の引数がintの場合、/
はフロア分割になりますが、一方または両方の引数がfloatの場合は、真の分割になります。
上記はもっと真実を語り、そして受け入れられた答えの2番目の段落よりもずっと明確です。
あなたのタイプに関係なく、//
は "フロア分割"を実装します。したがって、1.0/2.0
は0.5
を与えますが、1/2
、1//2
および1.0//2.0
は両方とも0
を与えます。
詳細については https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator を参照してください。
/ - >浮動小数点除算
// - >フロア区分
Python 2.7とPython 3.5の両方でいくつかの例を見てみましょう。
Python 2.7.10とPython 3.5 /
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10とPython 3.5 /
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
(Python 2.7では)Python 3.5と同じ出力にしたい場合は、次のようにします。
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
Python 2.7とPython 3.5のどちらでも、フロア分割に違いはありません。
138.93//3 ---> 46.0 #Python 2.7
138.93//3 ---> 46.0 #Python 3.5
4//3 ---> 1 #Python 2.7
4//3 ---> 1 #Python 3.5
誰もがすでに答えているように、//
はフロア分割です。
これが重要なのは、Python 3.xバージョンを含む2.2以降のすべてのPythonバージョンで、//
が明確にフロア分割されているためです。
/
の振る舞いは、以下に応じて変わる可能性があります。
__future__
インポートかどうか(モジュールローカル)-Q old
または-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
**
** /Division 左側のオペランドを右側のオペランドで除算するex :: 4/2 = 2
Floor Division(//) - 結果が、小数点以下の桁が削除された商であるオペランドの除算。ただし、オペランドの1つが負の場合、結果はフロアになります。つまり、ゼロから四捨五入されます(負の無限大に向かって)。 、-11.0 // 3 = -4.0
/ Divisionと// floor divisionの両方の演算子が同じように動作している
二重スラッシュ//
は、フロア分割です。
>>> 7//3
2
この答えでは、答えを伝えるだけでなく、//の利点も説明します。
Pythonを使用するほとんどの人は、Pythonのフロア除算演算子(//)を知っている必要があります。知らない人のために、この演算子は除算後の下限値を返します。例:5/2 = 2.5、ただし5 // 2 = 2(2はフロア値2.5)
しかし、除算演算子は、一般的に10 ^ 17より大きい数に対して異常に動作します。
x = 10000000000000000000006
if x / 2 == x // 2:
print("Hello")
else:
print("World")
上記のコードでは、HelloではなくWorldが出力されます。これは、10000000000000000000006/2が5e + 21を返すが、10000000000000000000006 // 2は正しい答え5000000000000000000003を返すためです。int(10000000000000000000006/2)でも5000000000000000000000を返しますが、これは正しくありません。
したがって、大きな数値を分割する場合でも、//演算子を使用します。
例:最初の100000000000000000000000010002数の合計をn:(n + 1)/ 2の式で求めたい場合、通常の除算operator(/)は間違った答えを返しますが、//演算子は正しい答えを返します。
//
はフロア分割です、それは常にあなたに結果の整数フロアを与えます。もう1つは「通常の」部門です。
方程式の答えは、次に小さい整数に丸められるか、または.0を小数点として浮動小数点数になります。
>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
5.0//2
演算子からの戻り値の return type はpythonの強制(型キャスト)規則に従うため、2.0
は2
になり、//
にはなりません。
Pythonはデータの損失を避けるために低いデータ型(integer)からより高いデータ型(float)への変換を推奨しています。
上記の答えは良いです。もう1点言いたいことがあります。いくつかの値までは、両方とも同じ商になります。そのフロア分割演算子(//
)は正常に動作しますが、分割(/
)演算子は動作しません。
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
以下は '/'と '//'の違いです。私はPython 3.7.2でこれらの算術演算を実行しました。
>>> print 11 / 3
3.6666666666666665
>>> print 11 // 3
3
>>> print 11.3 / 3
3.7666666666666667
>>> print 11.3 // 3
3.0