浅谈py的负数除法

前言

这是我参与新手入门的第3篇文章。java

众所周知,python是一种动态的,解释性,强类型语言。而js是动态,解释性,弱类型语言。 两种语言有不少相似,又有不少差别。本文简单介绍下负数取余的问题。python

负数取余

不知道你们有没有遇到过负数除法和取余的时候,从直觉上来讲,负数取余是没有物理意义的。 在这个问题上不一样编程语言有不一样的规定。编程

py计算结果

先来看看py运行%运算的结果。浏览器

image.png

7%3==1//嗯,你们都同样。markdown

-7%3==2//emmmmmmmmmmmmm,难道是-7重复加3,加到正数为止,正好为2?。编程语言

-7%-3==-1//肿么肥事啊,spa

7%-3==-2 // 发生甚么事了啦,一直重复-3,小于0为止正好-2?code


js计算结果

来看看浏览器控制台js的运行结果orm

image.png

在符号相同的状况下运算结果与py相同,但除法与被除数异号竟然不同!!!it

分析

从形式上找规律,py中的余数的符号与除数一致,而js中结果与被除数的符号保持一致。

这两种差别,实际上来自于他们对除法的规定不一样。余数=被除数-(被除数/除数)x除数。由于商不一样,因此余数不一样。

有2种除法模式:

  • floor除法,商采用floor法取整,趋负无穷截尾。python采用这种。

例子中:-7%3中,商为-2.333333,向下取整得-3,因此模就为-7 -(-3)x 3 => -7 -(-9)==2.

  • truncate 除法,商尽量的向0靠近。多数编程语言如C、java还有js等采用这种方案。

-7%3,商-2.333333靠近0取整得-2,因此余数为-7-(-6)==-1.

好了,以这种计算模式去看,彻底能解释通了。

总结

总结py就很特立独行。虽然生产中可能遇不到这个问题,但仍是能够了解下。

若有错误,欢迎指正。

相关文章
相关标签/搜索