Pythonで割り算の「商」と「余り」について、下記のポイントでまとめました。
- 「商」の求め方
- /演算子と//演算子はどちらも”商”が出力されますが、その違い
- 「余り」の求め方
- 「商」と「余り」を同時に出力する方法
確認した環境
- Ubuntu20.04LTS
- Python3.11.2
「商」の求め方
/ 演算子(x / y)
x と y の商を返します。値は常に浮動小数点数です。
# 値は常に浮動小数点です。
>>> 4 / 2
2.0
>>> 5 / 3
1.6666666666666667
# 複素数も計算されます
>>> (1+2j)/3
(0.3333333333333333+0.6666666666666666j)
operatorモジュールの、operator.truediv(a, b)と等価です。
>>> import operator
>>> operator.truediv(5, 3)
1.6666666666666667
参考までに、operator.truediv()関数のソースコードをみてみました。(以下)
同じになるわけですね。。
# cpython/Lib/operator.py
:
:
def truediv(a, b):
"Same as a / b."
return a / b
:
:
// 演算子(x // y)
x と y の商を切り下げたもので、整数値を返します。
被演算子の型によって返り値の型が変わります。
# 整数型
>>> 4 // 2
2
>>> 5 // 3
1
# 浮動小数点型
>>> 4.0 // 2
2.0
>>> 5.2 // 3
1.0
尚、複素数型は使えません
>>> (1+2j)//3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for //: 'complex' and 'int'
返り値は常に負の無限大の方向に丸められます。
>>> 4//-2
-2
# 5 / (-3) = -1.666667を負の無限大方向に丸めてます
>>> 5//-3
-2
operatorモジュールの、floordiv(a, b)と等価です。
>>> import operator
>>> operator.floordiv(5, 3)
1
/演算子と//演算子の違い
上述の通り、//演算子は商を切り下げた値になります。
- /演算子: 商を浮動小数点で返す
- //演算子: 商を切り下げたもので、整数値を返します
「余り」の求め方
% 演算子(x % y)
x / y の余りを整数値で返します。
>>> 4 % 2
0
>>> 5 % 3
2
operator. mod(a, b)と等価です
>>> import operator
>>> operator.mod(5, 3)
2
<参照>公式リファレンス:数値型 int, float, complex
「商」と「余り」を同時に取得する
divmod(a, b)を使います。(x // y, x % y) からなるペアを返します。
>>> divmod(4, 2)
(2, 0)
>>> divmod(5, 3)
(1, 2)
まとめ
割り算の「商」と「余り」を求める方法についてまとめました。//演算子って切り上げだっけ?切り下げだっけ?と忘れがちなので、この機会に覚えておきましょう!