python中的负数取模问题(一个大坑)
2024-09-02 14:19:33
先来看一段代码
这是什么情况?为什么会出现这种结果。我们再来看看其它语言的执行结果
我们用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
最新文章
- c#基础3
- 03.RedisJava客户端Jedis的使用
- MySql模糊查询like通配符使用详细介绍
- android登录界面
- mobile meta iphone
- 自制ZigBee协议分析仪
- Netflix性能监控工具Vector
- vue--监听器
- python进阶之 进程编程
- python学习之条件语句(if循环)
- Gym102040 .Asia Dhaka Regional Contest(寒假自训第9场)
- 编写一个函数 reverse_string(char * string)实现:将参数字符串中的字符反向排列 。(递归实现)
- 阅读<;SMPTE 274M-2005 1920X1080>;笔记
- 【python-sql】sql操作时遇到的坑
- boost-实用工具:noncopyable、optional、assign
- Scanner的概述与String类的构造和使用_DAY12
- nyoj 素数距离
- jmap和jstack使用
- http post url参数封装(key token 及校验码)
- Updated: EBS 12.1 + Transportable Tablespaces with Incremental Backup Option