淺談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就很特立獨行。雖然生產中可能遇不到這個問題,但仍是能夠了解下。

若有錯誤,歡迎指正。

相關文章
相關標籤/搜索