除法啰嗦的,不僅是python。
整數除以整數
看官請在啟動idle之后,練習下面的運算:
>>> 2/50>>> 2.0/50.4>>> 2/5.00.4>>> 2.0/5.00.4
看到沒有?麻煩出來了,如果從小學數學知識除法,以上四個運算結果都應該是0.4。但我們看到的后三個符合,第一個居然結果是0。why?
因為,在python里面有一個規定,像2/5中的除法這樣,是要取整。2除以5,商是0(整數),余數是2(整數)。那么如果用這種形式:2/5,計算結果就是商那個整數?;蛘呖梢岳斫鉃椋赫麛党哉麛?,結果是整數(商)。
繼續實驗,驗證這個結論:
>>> 5/22>>> 6/32>>> 5/22>>> 6/23>>> 7/23>>> 8/24>>> 9/24
注意:這里是得到整數商,而不是得到含有小數位的結果后“四舍五入”。例如5/2,得到的是商2,余數1,最終5/2=2。并不是對2.5進行四舍五入。
浮點數與整數相除
列為看官注意,這個標題和上面的標題格式不一樣,上面的標題是“整數除以整數”,如果按照風格一貫制的要求,本節標題應該是“浮點數除以整數”,但沒有,現在是“浮點數與整數相除”,這是因為包含了以下三種情況:
被除數是浮點數,除數是整數
被除數是整數,除數是浮點數
被除數和除數都是浮點數
出結論之前,還是先做實驗:
>>> 9.0/24.5>>> 9/2.04.5>>> 9.0/2.04.5>>> 8.0/24.0>>> 8/2.04.0>>> 8.0/2.04.0
歸納,得到規律:不管是被除數還是除數,只要有一個數是浮點數,結果就是浮點數。所以,如果相除的結果有余數,也不會像前面一樣了,而是要返回一個浮點數,這就跟在數學上學習的結果一樣了。
>>> 10.0/33.3333333333333335
這個是不是就有點搞怪了,按照數學知識,應該是3.33333...,后面是3的循環了。那么你的計算機就停不下來了,滿屏都是3。為了避免這個,python武斷終結了循環,但是,可悲的是沒有按照“四舍五入”的原則終止。
關于無限循環小數問題,小學都學習了,但是這可不是一個簡單問題,看看維基百科的詞條:0.999...,會不會有深入體會呢?
總之,要用python,就得遵循她的規定,前面兩條規定已經明確了。
補充一個資料,供有興趣的朋友閱讀:浮點數算法:爭議和限制
說明:以上除法規則,是針對python2,在python3中,將5/2和5.0/2等同起來了。不過,如果要得到那個整數部分的上,可以用另外一種方式:地板除.
>>> 9/24>>> 9//24
新聞熱點
疑難解答