先來看一段代碼
這是什么情況?為什么會出現這種結果。我們再來看看其它語言的執行結果
我們用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