除算に使用する場合の「/」と「//」の違いは何ですか?


473

どちらか一方を使用する利点はありますか?Python 2では、どちらも同じ結果を返すようです。

>>> 6/3
2
>>> 6//3
2

1
整数除算を行う演算子を導入する理由については、整数除算の問題を参照してください//
スリラム

回答:


650

Python 3.xでは、5 / 2が返され2.55 // 2が返され2ます。前者は浮動小数点除算であり、後者はフロア除算であり、整数除算とも呼ばれます。

Python 2.2以降の2.x行では、from __future__ import divisionPython 2.xが3.xの動作を採用する原因となるを実行しない限り、整数の違いはありません。

将来のインポートに関係なく、操作の床分割結果なので5.0 // 2返却2.0します。

詳細な説明はhttps://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operatorにあります。


編集:Python 2.2以降、分割を「修正」できる!(リンクされたPEPを読んでください)
u0b34a0f6ae 2009年

2
またpython -Qnew。他の分割オプション:-Qold(デフォルト)、 -Qwarn-Qwarnall
ジョン・ラRooy

2
すべてのバージョンで同じように5.0 / 2戻ることを指摘する価値があります。古い動作は、両方のオペランドが異なる場合にのみ異なります。2.55 / 2.0int
Chris

2
数値が負の場合はどうですか?負の整数でも動作は同じですか?
アーロンフランケ2018年

1
@Srinivasuあなたの例は役に立ちません。5 // 2(2を生成する)および-5 // 2(-3を生成する)のほうが適切です。
Marvin、

67

Python 2.xの明確化:

Python 2.xの行を明確にするために、/床の分割でも真の分割でもありません。現在受け入れられている答えはこれについて明確ではありません。

/両方の引数がの場合は床の分割ですがintどちらかまたは両方の引数がの場合は真の分割floatです。

上記はより真実を伝えており、受け入れられた回答の2番目の段落よりも明確です。


33

//タイプに関係なく、「フロアディビジョン」を実装します。そう 1.0/2.0与える0.5が、両方1/21//2そして1.0//2.0与えるでしょう0

詳細については、https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operatorを参照してください


これは良い答えです。PEPリンクは役に立ちます。また、使用することを検討してください。math.floor()またはmath.fmod()、単項演算子で何が起こっているのかわからない場合は、
Scott Lowrey、2015

/および//2項演算子(2つのオペランド、左と右、分子と分母)
iono

28

/ ->浮動小数点除算

// ->フロアディビジョン

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

これはint(5/2)と同じですか?
PirateApp 2018年

数値が負の場合はどうですか?負の整数でも動作は同じですか?
アーロンフランケ2018年

1
Re:ネガティブ -動作は同じですが、結果はフロアであるため、丸めは常によりネガティブになるように下げられます。いくつかの例:-100 // 33=> -4 ; 100 // -33=> -4 ; しかし、フロア関数の丸め方向のため、次のものは前のものと比較すると直観に反するように見えるかもしれません:-100 // -33=> 3
オルドス・ベーコン

22

誰もがすでに答えたように、//床の分割です。

これが重要なのは、//Python 3.xバージョンを含む2.2からのすべてのPythonバージョンで、それが明白なフロア分割であることです。

の動作は以下に/応じて変化します。

  • アクティブ __future__インポートかどうか(モジュールローカル)
  • Pythonコマンドラインオプション、-Q oldまたは-Q new


5

Python 2.7およびその他の次期バージョンのpython:

  • 部門(/

左側のオペランドを右側のオペランドで除算します

例: 4 / 2 = 2

  • フロア部門(//

オペランドの除算。結果は、小数点以下の桁が除かれた商になります。しかし、オペランドの1つが負の場合、結果はフロアされます。つまり、ゼロから離れて(負の無限大に向かって)丸められます。

例:9//2 = 49.0//2.0 = 4.0-11//3 = -4-11.0//3 = -4.0

/ディビジョンと//フロアディビジョンのオペレーターはどちらも同じように操作します。


2
無限に向かって、ゼロから離れては別のものです。(-1.2と3.4)の例:「フローリング」は負の無限大(-2と3)、「打ち切り」はゼロ(-1と3)、「飽和」はゼロから離れている(-2と4)、 「上限」は正の無限大(-1と4)に向かっています。
Phernost 2017



2

方程式の答えは、小数点が.0の次に小さい整数または浮動小数点数に丸められます。

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

2

上記の答えは良いです。別のポイントを追加したいと思います。いくつかの値までは、両方とも同じ商になります。その後、フロア除算演算子(//)は正常に機能しますが、除算演算子()は機能しません/

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer

-1

5.0//2結果は2.0になります。演算子からの戻り値の戻り値のがpython強制(型キャスト)規則に従う2ためではありません。//

Pythonは、データ損失を回避するために、低いデータ型(整数)から高いデータ型(浮動小数点)への変換を促進します。


-1
  • // 床の分割です。常に結果の床の値を提供します。
  • もう1つ/は浮動小数点除算です。

以下は違います///; 私はこれらの算術演算を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

2
この回答は他のアイデアがカバーしていないものをどのように追加しますか?または、この回答は他の回答よりも何らかの点で優れていますか?
Rory Daulton

2
以下はプログラムの出力です。それは何も説明しません。
ローンの侯爵
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.