一直在寻找其他答案,但我仍然不明白python中负数的模
例如df的答案
x == (x/y)*y + (x%y)
所以有意义的是,-2%5=-2-(-2/5)*5=3
这是不是(-2-(-2/5)*5)=0,还是我疯了? Modulus operation with negatives values - weird thing?
跟这个一样 negative numbers modulo in python 他从哪里得到-2?
最后,如果符号依赖于股利,为什么负股利的产出不与正股利的产出相同?
例如
print([8%5,-8%5,4%5,-4%5])
是
[3, 2, 4, 1]
在Python中,模是根据两个规则计算的:
(a // b) * b + (a % b) == a
,和a % b
与b
具有相同的符号。结合整数除法向下舍入(朝向&∞)的事实,解释了产生的行为。
如果你做
-8 // 5
,你会得到-1.6,也就是-2。把它乘以5得到-10;2是你要加上去得到-8的数字。因此,-8 % 5
是2。这背后的基本原理实际上是least residue的数学定义。Python尊重这个定义,而在大多数其他编程语言中,模运算符实际上更像是“除法后的reaminder”运算符。要计算
-5 % 11
的最小余数,只需将11添加到-5,直到获得范围[0,10]
内的正整数,结果是6。在Python中,
a // b
被定义为floor(a/b),而其他大多数语言中整数除法被定义为trunc(a/b)。对a % b
=a - (a // b) * b
的解释也有相应的差异。原因是Python对
%
运算符(和divmod
)的定义通常比其他语言更有用。例如:使用此函数,
time_of_day(12345)
返回'03:25:45'
,如您所料。但是在纪元开始前12345秒是什么时候?根据Python对
divmod
的定义,time_of_day(-12345)
正确地返回'20:34:15'
。如果我们重新定义
divmod
来使用/
和%
的C定义呢?现在,
time_of_day(-12345)
返回'-3:-25:-45'
,这不是一天中的有效时间。如果标准Pythondivmod
函数是这样实现的,那么您必须编写特殊的case代码来处理负输入。但对于地板风格的划分,就像我的第一个例子,它只是工作。相关问题 更多 >
编程相关推荐