本篇文章,想聊一下Python中的round()方法。
這時候,有人就會說,round()方法嘛!簡單!round() 方法就是返回浮點數x的四舍五入值。
你看下面這些例子:
round(100.123,1)
round(-100.1)
round(80.23456,3)
round(1.75,1)
上面的運行結果:
100.1
-100
80.235
1.8
一切正常,返回浮點數的四舍五入呀。
那么你再看下面的例子:
round(1.25,1)
round(1.65,1)
運行結果:
1.2
1.6
大家可以試試看!!
嗯??為啥不是1.3和1.7嘞?不是四舍五入的嗎?且聽我分析~~
在python2中,round()方法確實是 “四舍” ,卻不是 “五入”。如果兩端一樣遠,也就是碰到 “5” 時,則保留距離0遠的一邊。大於 “5” 的數,才 “入”。
而在python3中,round()方法也是 “四舍”,如果兩端一樣遠,會保留到偶數一邊。大於 “5” 的數才“入”。這也就是為什么上面的例子是1.2和1.6了。(本人在Python3中運行的)
原來如此,round()方法還分情況討論的呀
這就完了嗎?並沒有!再看下面的例子:
round(2.675,2)
運行結果:
2.67
到這兒,小伙伴們就納悶了,為啥?
無論在Python2中還是Python3中,得到的結果都應該是 “2.68”,可這里的結果為什么是 “2.67”?
莫慌~~
在機器中浮點數不一定能精確表達,機器做出了截斷處理。那么在機器中保存的2.675這個數字就比實際數字要小那么一點點。這一點點就導致了它離2.67要更近一點點,所以保留兩位小數時就近似到了2.67。
不好理解?看下圖:
Decimal類型可以非常精確地在計算機中存儲,我們導入該模塊,查看“2.675”
在存儲時,確實小那么一點點,所以保留兩位小數時,成了“2.67”。
總結
看來,round()方法並不只是簡單的四舍五入,不僅要分Python2和Python3討論,還要看數字在計算機中的存儲!!確實值得好好研究。