我是靠谱客的博主 过时雪糕,最近开发中收集的这篇文章主要介绍java取负数_Python 中负数取模问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

v2-d7209f3d2aa889b63e0d2287716e4831_1440w.jpg?source=172ae18b

起步

应该很少人遇到或者注意到,Python 在某些情况取模会不一样。

v2-16b87dc8162bb66c301f11966b41139b_b.jpg

10 % -3,python 和 js 出来的结果不一样。我试着更多语言的结果,包括php和c在内的结果都是 1:

v2-1a7818e57d1a50b0d57fb042a308408c_b.jpg

Python 得到的结果与其他语言不一样,所以 Python 是错的?然而,这个结果当然是 Python 有意为之,所以我更愿意把它归类到 python 坑里去,Python 对于异号除法的处理和大多流行的语言不一样。

除法取整

要了解 Python 取模为什么这么奇怪还得先从除法取整说起。除法的取整可以分为两类:向下取整和向零取整。

  • 向下取整:向 -∞ 方向取最接近精确值的整数,即取商的 floor(x) ,称为取底除法。Python 采用这种方式。
  • 向零取整:向0方向取最接近精确值的整数,即舍弃小数部分,称为截断除法。C,php,js,java 采用这种方式。

来自维基百科,链接https://zh.wikipedia.org/wiki/模除:

很多取模的实现都使用了截断除法,此时商由截断函数定义定义 q = trunc(a/n),因此由等式 1 有,余数和被除数符号一致。商向零取整:结果等于普通除法所得的小数靠近 0 方向的第一个整数。
高德纳[7]定义的取底除法的商由取底函数定义:q = ⌊a/n⌋。

因此,对于Python来说, 10 ÷ -3 = -3.33333 ,向下取整就得到 -4。所以余数就是 -2 了。逆运算,商 x 除数 + 余数 也能等于10。

总结

其实,对于除数的取整具体还是看编译器如何处理的,并没有统一的标准。C90 ,当除数 a 和除数 n 都是负数时,C90 标准并没有做具体的规定; C99才正式确定了趋零截尾。

最后

以上就是过时雪糕为你收集整理的java取负数_Python 中负数取模问题的全部内容,希望文章能够帮你解决java取负数_Python 中负数取模问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部