Python商与余数

时间:2009-02-04 01:05:47

标签: python modulo

python 2.6 docs声明x % y被定义为x / y(http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex)的余数。我不清楚实际发生了什么,如:

for i in range(2, 11):
    print 1.0 % i

按照我的预期打印“1.0”十次,而不是“0.5,0.333333,0.25”等(1/2 = 0.5等)。

5 个答案:

答案 0 :(得分:10)

模数在整数上下文中执行,而不是小数(余数是整数)。因此:

1 % 1  = 0  (1 times 1 plus 0)
1 % 2  = 1  (2 times 0 plus 1)
1 % 3  = 1  (3 times 0 plus 1)

6 % 3 = 0  (3 times 2 plus 0)
7 % 3 = 1  (3 times 2 plus 1)
8 % 3 = 2  (3 times 2 plus 2)

etc
  

如何获得x / y的实际余数?

我认为你的意思是做一个常规的浮点除法?

for i in range(2, 11):
    print 1.0 / i

答案 1 :(得分:8)

我认为你可以通过这样的方式得到你想要的结果:

for i in range(2, 11):
    print 1.0*(1 % i) / i

这计算其他人解释的(整数)余数。然后再用分母除以产生商的小数部分。

请注意,我将模运算的结果乘以1.0,以确保完成浮点除法运算(而不是整数除法,这将导致0)。

答案 2 :(得分:4)

您混淆了divisionmodulus

“0.5,0.333333,0.25”等正如我所料(1/2 = 0.5等)。“

这是分裂的结果。

模数

模数(%)是整数除法后剩余的余数。

您的样本值是简单除法,即/运算符。不是%运营商。

答案 3 :(得分:3)

不会将1除以大于它的数字而得到0而余数为1吗?

人群中的理论师可以纠正我,但我认为模数/余数仅在整数上定义。

答案 4 :(得分:1)

我们可以有2种类型的划分,我们可以通过返回类型来定义:

Float:a / b。例如:3/2 = 1.5

def division(a,b):
    return a/b

Int:a // b和a%b。例如:3 // 2 = 1和3%2 = 1

def quotient(a,b):
    return a//b
def remainder(a,b):
    return a%b