码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-10-22 10:44:07      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:为什么   Golan   问题   src   com   截断   技术   因此   流行语言   

先来看一段代码

技术图片

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

技术图片

技术图片

技术图片

我们用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

技术图片

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

标签:为什么   Golan   问题   src   com   截断   技术   因此   流行语言   

原文地址:https://www.cnblogs.com/traditional/p/11718193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!