这是我参与新手入门的第3篇文章。java
众所周知,python是一种动态的,解释性,强类型语言。而js是动态,解释性,弱类型语言。 两种语言有不少相似,又有不少差别。本文简单介绍下负数取余的问题。python
不知道你们有没有遇到过负数除法和取余的时候,从直觉上来讲,负数取余是没有物理意义的。 在这个问题上不一样编程语言有不一样的规定。编程
先来看看py运行%运算的结果。浏览器
7%3==1//嗯,你们都同样。markdown
-7%3==2//emmmmmmmmmmmmm,难道是-7重复加3,加到正数为止,正好为2?。编程语言
-7%-3==-1//肿么肥事啊,spa
7%-3==-2 // 发生甚么事了啦,一直重复-3,小于0为止正好-2?code
来看看浏览器控制台js的运行结果orm
在符号相同的状况下运算结果与py相同,但除法与被除数异号竟然不同!!!it
从形式上找规律,py中的余数的符号与除数一致,而js中结果与被除数的符号保持一致。
这两种差别,实际上来自于他们对除法的规定不一样。余数=被除数-(被除数/除数)x除数。由于商不一样,因此余数不一样。
有2种除法模式:
例子中:-7%3中,商为-2.333333,向下取整得-3,因此模就为-7 -(-3)x 3 => -7 -(-9)==2.
-7%3,商-2.333333靠近0取整得-2,因此余数为-7-(-6)==-1.
好了,以这种计算模式去看,彻底能解释通了。
总结py就很特立独行。虽然生产中可能遇不到这个问题,但仍是能够了解下。
若有错误,欢迎指正。