python 割り算に関する演算子 a//b, a%b, a/b
a//b, a%b, a/b の比較
整数÷整数は、"/"の演算子で割り算すると実数になる。
"/"の代わりに"//"の演算子を使うと、整数切り捨て除算になる。
"%"の演算子は、整数切り捨て除算の余りが求まる。
マイナス値を整数除算する場合、整数への丸め方は言語によって異なるので注意。
pythonでは小さくなるように丸める。
b = 4 print("*** a//b, a%b, a/b の比較 ***") for a in range(9, -10, -1): print("{0}//{1}={2}, {0}%{1}={3}, {0}/{1}={4}".format(a, b, a//b, a%b, a/b))
上記を実行すると、次のようになる。
*** a//b, a%b, a/b の比較 *** 9//4=2, 9%4=1, 9/4=2.25 8//4=2, 8%4=0, 8/4=2.0 7//4=1, 7%4=3, 7/4=1.75 6//4=1, 6%4=2, 6/4=1.5 5//4=1, 5%4=1, 5/4=1.25 4//4=1, 4%4=0, 4/4=1.0 3//4=0, 3%4=3, 3/4=0.75 2//4=0, 2%4=2, 2/4=0.5 1//4=0, 1%4=1, 1/4=0.25 0//4=0, 0%4=0, 0/4=0.0 -1//4=-1, -1%4=3, -1/4=-0.25 -2//4=-1, -2%4=2, -2/4=-0.5 -3//4=-1, -3%4=1, -3/4=-0.75 -4//4=-1, -4%4=0, -4/4=-1.0 -5//4=-2, -5%4=3, -5/4=-1.25 -6//4=-2, -6%4=2, -6/4=-1.5 -7//4=-2, -7%4=1, -7/4=-1.75 -8//4=-2, -8%4=0, -8/4=-2.0 -9//4=-3, -9%4=3, -9/4=-2.25
divmod()関数
divmod()を使うと、
"//"の演算子で求まる整数除算と、
"%"の演算子で求まる余りを、同時に算出できる。
b = 4 print("*** a//b, a%b, a/b, divmod() の比較 ***") for a in range(9, -10, -1): q, mod = divmod(a, b) print("{0}//{1}={2}={5}, {0}%{1}={3}={6}, {0}/{1}={4}".format(a, b, a//b, a%b, a/b, q, mod))
上記を実行すると、次のようになる。
*** a//b, a%b, a/b, divmod() の比較 *** 9//4=2=2, 9%4=1=1, 9/4=2.25 8//4=2=2, 8%4=0=0, 8/4=2.0 7//4=1=1, 7%4=3=3, 7/4=1.75 6//4=1=1, 6%4=2=2, 6/4=1.5 5//4=1=1, 5%4=1=1, 5/4=1.25 4//4=1=1, 4%4=0=0, 4/4=1.0 3//4=0=0, 3%4=3=3, 3/4=0.75 2//4=0=0, 2%4=2=2, 2/4=0.5 1//4=0=0, 1%4=1=1, 1/4=0.25 0//4=0=0, 0%4=0=0, 0/4=0.0 -1//4=-1=-1, -1%4=3=3, -1/4=-0.25 -2//4=-1=-1, -2%4=2=2, -2/4=-0.5 -3//4=-1=-1, -3%4=1=1, -3/4=-0.75 -4//4=-1=-1, -4%4=0=0, -4/4=-1.0 -5//4=-2=-2, -5%4=3=3, -5/4=-1.25 -6//4=-2=-2, -6%4=2=2, -6/4=-1.5 -7//4=-2=-2, -7%4=1=1, -7/4=-1.75 -8//4=-2=-2, -8%4=0=0, -8/4=-2.0 -9//4=-3=-3, -9%4=3=3, -9/4=-2.25
a//b と int(a/b) の比較
"a//b" の丸め方は小数点以下を値の小さい方に丸めて整数にするが、
"int(a/b)" の丸め方は小数点以下を値の小さい方ではなく、
絶対値の小さい方に丸めて整数にする。
従って、a//b ≠ int(a/b) となる場合があるので注意が必要。
b = 4 print("*** a//b, int(a/b) の比較 ***") for a in range(9, -10, -1): print("{0}//{1}={2}, int({0}/{1})=int({3})={4}".format(a, b, a//b, a/b, int(a/b)))
上記を実行すると、次のようになる。
*** a//b, int(a/b) の比較 *** 9//4=2, int(9/4)=int(2.25)=2 8//4=2, int(8/4)=int(2.0)=2 7//4=1, int(7/4)=int(1.75)=1 6//4=1, int(6/4)=int(1.5)=1 5//4=1, int(5/4)=int(1.25)=1 4//4=1, int(4/4)=int(1.0)=1 3//4=0, int(3/4)=int(0.75)=0 2//4=0, int(2/4)=int(0.5)=0 1//4=0, int(1/4)=int(0.25)=0 0//4=0, int(0/4)=int(0.0)=0 -1//4=-1, int(-1/4)=int(-0.25)=0 -2//4=-1, int(-2/4)=int(-0.5)=0 -3//4=-1, int(-3/4)=int(-0.75)=0 -4//4=-1, int(-4/4)=int(-1.0)=-1 -5//4=-2, int(-5/4)=int(-1.25)=-1 -6//4=-2, int(-6/4)=int(-1.5)=-1 -7//4=-2, int(-7/4)=int(-1.75)=-1 -8//4=-2, int(-8/4)=int(-2.0)=-2 -9//4=-3, int(-9/4)=int(-2.25)=-2