python中的负数取模问题(一个大坑)

先来看一段代码

这是什么情况?为什么会出现这种结果。我们再来看看其它语言的执行结果

我们用golang、js、c分别算了一下,结果得到的结果都是一致的,但是python为啥不一样呢?

其实之所以这么做是python有意而为之,因为python对于正负号不同的两个值的除法处理方式和其它流行语言不一样。这就要考虑到机器是如何计算商和余数的,以10 % 3为例,先算10 / 3 = 3.333,然后取整得到3,也就是商,然后10 - 3 * 3=1,因此对于两个正数相除是没有疑问的,一样的结果。

但是如果是负数相除就不一样了,python是向下取整,而golang、c、js等语言则是直接把小数点后面截断,然后得到商。比如:10 % -3,得到-3.3333。如果是golang等其他语言,那么直接截断,因此商就是-3。10减去-3乘上-3,得到余数就是1。但如果是python,那么就向下取整,因此商是-4,所以10 -  (-4 * -3)得到-2

猜你喜欢

转载自www.cnblogs.com/traditional/p/11718193.html