找出一个数字的除法余数

225

在Python中,如何找到一个数的除法余数?

例如:
如果这个数是26,除数是7,那么除法余数就是5。
(因为7+7+7=21,26-21=5。)


如果要进行简单的可除性测试,请参见如何检查一个数是否能被另一个数整除?


我建议查找模运算操作符。 - yurib
13个回答

272

你需要使用模运算符:

a % b
例如:
>>> 26 % 7
5
当然,也许他们希望您自己实现它,这也不会太难。

16
请注意,模运算符始终返回正数,因此对于负数,当谈论余数时可能不是您所期望的结果:-10 % 3 == 2。但是 a/b*b + a%b == a 仍然成立,因为Python始终向负无穷大四舍五入,而不像其他一些语言向零舍入但会返回-1。 - marcelj
6
这是因为Python的“%”执行真正的模运算,返回值位于范围[0,除数)内,并与向负无穷大舍入的地板除法配对。而C语言使用“%”操作符进行余数运算,返回值位于范围(-除数,除数)内,并与标准除法(向零舍入)配对。 - Aaron Franke

239

可以使用运算符%来获取两个数相除的余数:

>>> 26%7
5

如果您需要商和余数,可以使用内置的divmod函数:

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)

75

26 % 7(你将得到余数)

26 / 7(你将得到被除数,可能是浮点值)

26 // 7(你将得到被除数,只能为整数值)


4
能否在一行中同时获取商和余数? divisor, remainder = 26 <运算符> 7 (注:这里的“运算符”需要替换为实际的除法运算符,因为中文无法确定是哪一个符号) - Guimoute
2
@Guimoute,请查看此同一问题中的此答案 - tzot

41

如果你想在一行代码中获取商和余数(更通用的用法), 可以使用:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)

计算“商”的更简单的方法是使用“//”。quotient = dividend // divisor - Pedram

25

从Python 3.7开始,新增了math.remainder()函数:

from math import remainder
print(remainder(26,7))

输出:

-2.0  # not 5

请注意,如上所述,这不同于%

引用文档

math.remainder(x, y)

返回 x 除以 y 后的 IEEE 754 样式余数。 对于有限的 x 和有限的非零 y,这是差异 x - n*y,其中 n 是商 x / y 的精确值的最接近整数。 如果 x / y 恰好介于两个连续整数的中间,则选择最近的偶数整数作为 n。 因此,余数 r = remainder(x, y) 总是满足 abs(r) <= 0.5 * abs(y)。

特殊情况遵循 IEEE 754:特别是,remainder(x, math.inf) 对于任何有限的 x 都是 x,而 remainder(x, 0) 和 remainder(math.inf, x) 对于任何非 NaN x 都会引发 ValueError。 如果除余运算的结果为零,则该零将与 x 具有相同的符号。

在使用 IEEE 754 二进制浮点数的平台上,此操作的结果始终是完全可表示的:不会引入舍入误差。

Issue29962描述了创建这个新函数的基本原理。


3
math.remainder 可能不会按照您的预期工作,以下是 Python 3.7 的示例:
math.remainder(-2.99,2) -0.9900000000000002 math.remainder(-3,2) 1.0
- Dominic Barraclough

20

如果你想避免使用取模运算,你也可以使用四则运算的组合 :)

26 - (26 // 7 * 7) = 5

5

在除法计算时,使用%代替/。这将返回给你余数。因此,在您的情况下:

26 % 7 = 5

5
我们可以使用取模运算符(%)来解决这个问题。
26 % 7 = 5;
但是,26 / 7 = 3,因为它将给出商,而%运算符将给出余数。

4
如果您使用的是Python 2,那么26/7 = 3;如果是Python 3,则26/7约等于3.7142857142857144。 - Antti A

4

取模运算是正确答案,但如果你手动计算的话,以下方法也可行。

num = input("Enter a number: ")
div = input("Enter a divisor: ")

while num >= div:
    num -= div
print num

5
仅当num大于等于0且dif大于0时才有效。 - 12431234123412341234123

3
您可以使用模运算符来找到余数。 示例:
a=14
b=10
print(a%b)

它将打印4


这个答案是误导性的,问题明确要求“余数”。Python使用模运算符“%”,在数学上有所不同。更多信息请参见:https://dev59.com/FG855IYBdhLWcg3wSSOl - mTheSame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接