代码之家  ›  专栏  ›  技术社区  ›  Justin R.

python商与余数

  •  -2
  • Justin R.  · 技术社区  · 16 年前

    python 2.6文档声明 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/2=0.5等)打印“1.0”10次,而不是“0.5、0.333333、0.25”等。

    5 回复  |  直到 8 年前
        1
  •  8
  •   Greg Hewgill    16 年前

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

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

    这将计算(整数)余数,如其他人所解释的那样。然后再除以分母,得到商的小数部分。

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

        2
  •  10
  •   codelogic    16 年前

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

    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
    
        3
  •  4
  •   S.Lott    16 年前

    你迷惑了 division modulus .

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

    这是 分开 .

    不是 模数 .

    Modulus % )整数除法后的余数。

    您的示例值是简单的除法,即 / 操作员。不是 % 操作员。

        4
  •  3
  •   Dana    16 年前

    将1除以一个大于它的数,会得到0和余数1吗?

    人群中的数字理论家也许会纠正我,但我认为模/余数只在整数上定义。

        5
  •  1
  •   GiodoAldeima    8 年前

    我们可以有两种类型的除法,我们可以通过返回类型来定义:

    浮动: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
    
    推荐文章