>>2/50>>>2.0/50.4>>>2/5.00.4>>>2.0/5.00.4看到?jīng)]有?麻煩出來了,如果從小學(xué)數(shù)學(xué)知識(shí)除法,以上四個(gè)運(yùn)算結(jié)果都應(yīng)該是0.4。但我們看到的后三個(gè)符合,第一個(gè)居然結(jié)果是0。why?因?yàn)椋趐ython里面有一個(gè)規(guī)定,像2/5中的除法這樣,是要取整。2除以5,商是0(整數(shù)),余數(shù)是2(整數(shù))。那么如果用這種形式:2/5,計(jì)算結(jié)果就是商那個(gè)" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

跟老齊學(xué)Python之??嗦的除法

系統(tǒng) 1855 0

除法??嗦的,不僅是python。

整數(shù)除以整數(shù)

看官請(qǐng)?jiān)趩?dòng)idle之后,練習(xí)下面的運(yùn)算:

            
>>> 2/5
0
>>> 2.0/5
0.4
>>> 2/5.0
0.4
>>> 2.0/5.0
0.4

          

看到?jīng)]有?麻煩出來了,如果從小學(xué)數(shù)學(xué)知識(shí)除法,以上四個(gè)運(yùn)算結(jié)果都應(yīng)該是0.4。但我們看到的后三個(gè)符合,第一個(gè)居然結(jié)果是0。why?

因?yàn)椋趐ython里面有一個(gè)規(guī)定,像2/5中的除法這樣,是要取整。2除以5,商是0(整數(shù)),余數(shù)是2(整數(shù))。那么如果用這種形式:2/5,計(jì)算結(jié)果就是商那個(gè)整數(shù)。或者可以理解為:整數(shù)除以整數(shù),結(jié)果是整數(shù)(商)。

繼續(xù)實(shí)驗(yàn),驗(yàn)證這個(gè)結(jié)論:

            
>>> 5/2
2
>>> 6/3
2
>>> 5/2
2
>>> 6/2
3
>>> 7/2
3
>>> 8/2
4
>>> 9/2
4

          

注意:這里是得到整數(shù)商,而不是得到含有小數(shù)位的結(jié)果后“四舍五入”。例如5/2,得到的是商2,余數(shù)1,最終5/2=2。并不是對(duì)2.5進(jìn)行四舍五入。

浮點(diǎn)數(shù)與整數(shù)相除

列為看官注意,這個(gè)標(biāo)題和上面的標(biāo)題格式不一樣,上面的標(biāo)題是“整數(shù)除以整數(shù)”,如果按照風(fēng)格一貫制的要求,本節(jié)標(biāo)題應(yīng)該是“浮點(diǎn)數(shù)除以整數(shù)”,但沒有,現(xiàn)在是“浮點(diǎn)數(shù)與整數(shù)相除”,這是因?yàn)榘艘韵氯N情況:

被除數(shù)是浮點(diǎn)數(shù),除數(shù)是整數(shù)
被除數(shù)是整數(shù),除數(shù)是浮點(diǎn)數(shù)
被除數(shù)和除數(shù)都是浮點(diǎn)數(shù)
出結(jié)論之前,還是先做實(shí)驗(yàn):

            
>>> 9.0/2
4.5
>>> 9/2.0
4.5
>>> 9.0/2.0
4.5
>>> 8.0/2
4.0
>>> 8/2.0
4.0
>>> 8.0/2.0
4.0

          

歸納,得到規(guī)律:不管是被除數(shù)還是除數(shù),只要有一個(gè)數(shù)是浮點(diǎn)數(shù),結(jié)果就是浮點(diǎn)數(shù)。所以,如果相除的結(jié)果有余數(shù),也不會(huì)像前面一樣了,而是要返回一個(gè)浮點(diǎn)數(shù),這就跟在數(shù)學(xué)上學(xué)習(xí)的結(jié)果一樣了。

            
>>> 10.0/3
3.3333333333333335
          


這個(gè)是不是就有點(diǎn)搞怪了,按照數(shù)學(xué)知識(shí),應(yīng)該是3.33333...,后面是3的循環(huán)了。那么你的計(jì)算機(jī)就停不下來了,滿屏都是3。為了避免這個(gè),python武斷終結(jié)了循環(huán),但是,可悲的是沒有按照“四舍五入”的原則終止。

關(guān)于無限循環(huán)小數(shù)問題,小學(xué)都學(xué)習(xí)了,但是這可不是一個(gè)簡(jiǎn)單問題,看看維基百科的詞條:0.999...,會(huì)不會(huì)有深入體會(huì)呢?

總之,要用python,就得遵循她的規(guī)定,前面兩條規(guī)定已經(jīng)明確了。

補(bǔ)充一個(gè)資料,供有興趣的朋友閱讀:浮點(diǎn)數(shù)算法:爭(zhēng)議和限制
說明:以上除法規(guī)則,是針對(duì)python2,在python3中,將5/2和5.0/2等同起來了。不過,如果要得到那個(gè)整數(shù)部分的上,可以用另外一種方式:地板除.

            
>>> 9/2
4
>>> 9//2
4

          

python總會(huì)要提供多種解決問題的方案的,這是她的風(fēng)格。

開始用輪子

python之所以受人歡迎,一個(gè)很重重要的原因,就是輪子多。這是比喻啦。就好比你要跑的快,怎么辦?光天天練習(xí)跑步是不行滴,要用輪子。找輛自行車,就快了很多。還嫌不夠快,再換電瓶車,再換汽車,再換高鐵...反正你可以選擇的很多。但是,這些讓你跑的快的東西,多數(shù)不是你自己造的,是別人造好了,你來用。甚至兩條腿也是感謝父母恩賜。正是因?yàn)檩喿佣啵梢赃x擇的多,就可以以各種不同速度享受了。

python就是這樣,有各種各樣別人造好的輪子,我們只需要用。只不過那些輪子在python里面的名字不叫自行車、汽車,叫做“模塊”,有人承接別的語(yǔ)言的名稱,叫做“類庫(kù)”、“類”。不管叫什么名字把。就是別人造好的東西我們拿過來使用。

怎么用?可以通過兩種形式用:

形式1:import module-name。import后面跟空格,然后是模塊名稱,例如:import os
形式2:from module1 import module11。module1是一個(gè)大模塊,里面還有子模塊module11,只想用module11,就這么寫了。比如下面的例子:
不??嗦了,實(shí)驗(yàn)一個(gè):

            
>>> from __future__ import division
>>> 5/2
2.5
>>> 9/2
4.5
>>> 9.0/2
4.5
>>> 9/2.0
4.5

          

注意了,引用了一個(gè)模塊之后,再做除法,就不管什么情況,都是得到浮點(diǎn)數(shù)的結(jié)果了。

這就是輪子的力量。

關(guān)于余數(shù)

前面計(jì)算5/2的時(shí)候,商是2,余數(shù)是1

余數(shù)怎么得到?

實(shí)驗(yàn)下面的操作:

            
>>> 5%2
1
>>> 9%2
1
>>> 7%3
1
>>> 6%4
2
>>> 5.0%2
1.0

          

符號(hào):%,就是要得到兩個(gè)數(shù)(可以是整數(shù),也可以是浮點(diǎn)數(shù))相除的余數(shù)。

前面說python有很多人見人愛的輪子(模塊),她還有豐富的內(nèi)建函數(shù),也會(huì)幫我們做不少事情。例如函數(shù)divmod()

            
>>> divmod(5,2) #表示5除以2,返回了商和余數(shù)
(2, 1)
>>> divmod(9,2)
(4, 1)
>>> divmod(5.0,2)
(2.0, 1.0)

          

四舍五入

最后一個(gè)了,一定要堅(jiān)持,今天的確有點(diǎn)??嗦了。要實(shí)現(xiàn)四舍五入,很簡(jiǎn)單,就是內(nèi)建函數(shù):round()

動(dòng)手試試:

            
>>> round(1.234567,2)
1.23
>>> round(1.234567,3)
1.235
>>> round(10.0/3,4)
3.3333

          

簡(jiǎn)單吧。越簡(jiǎn)單的時(shí)候,越要小心,當(dāng)你遇到下面的情況,就有點(diǎn)懷疑了:

            
>>> round(1.2345,3)
1.234        #應(yīng)該是:1.235
>>> round(2.235,2)
2.23        #應(yīng)該是:2.24

          

哈哈,我發(fā)現(xiàn)了python的一個(gè)bug,太激動(dòng)了。

別那么激動(dòng),如果真的是bug,這么明顯,是輪不到我的。為什么?具體解釋看這里,下面摘錄官方文檔中的一段話:

            
Note:
The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it's a result of the fact that most decimal fractions can't be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information.

          

原來真的輪不到我。(垂頭喪氣狀。)

似乎除法的問題到此要結(jié)束了,其實(shí)遠(yuǎn)遠(yuǎn)沒有,不過,做為初學(xué)者,至此即可。還留下了很多話題,比如如何處理循環(huán)小數(shù)問題,我肯定不會(huì)讓有探索精神的朋友失望的,在我的github中有這樣一個(gè)輪子,如果要深入研究,可以來這里嘗試。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99热免费在线 | 免费一区二区三区四区五区 | 亚洲国产一区二区三区精品 | 国产欧美日韩精品第二区 | 色激情综合网 | 久久综合一| 亚洲国产欧美一区二区欧美 | 97久久国产一区二区三区四区 | 国产精品美女流白浆视频 | 91人人看| 九九热在线视频播放 | 拔插拔插成人 | 久久久久久综合一区中文字幕 | 国产精品国产欧美综合一区 | 久久久久久久免费视频 | 元龙第三季免费观看 | 日韩国产精品欧美一区二区 | 日韩精品欧美成人 | 妖精视频永久在线入口 | 大学生一一级毛片在线播放 | 日韩精品a | 久久精品成人国产午夜 | 欧美久久一区二区 | 中文字幕在线视频观看 | 伊人久久在线视频 | 一及 片日本 | 日韩成人免费视频 | 日韩视频免费一区二区三区 | 日韩一区二区三区不卡 | 亚洲精品亚洲九十七页 | 久久欧美久久欧美精品 | 狠狠操狠狠插 | 久久免费高清视频 | 久久精品影院一区二区三区 | 国产精品推荐 | 色姑娘色综合 | 鲁丝一区| 亚洲春色综合另类网蜜桃 | 99热成人精品热久久66 | 日韩精品一区二区三区乱码 | 日韩一级黄色大片 |