摘要:取整使用函數(shù)可以輕松的對浮點(diǎn)數(shù)進(jìn)行取整操作。這是因?yàn)楹瘮?shù)在應(yīng)對這種與兩個整數(shù)距離相同的情況時(shí),會取到最近的偶數(shù)上去。如果你特別需要精確的數(shù)值,那么可以使用模塊。
round()取整
使用round()函數(shù)可以輕松的對浮點(diǎn)數(shù)進(jìn)行取整操作。示例如下:
>>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 >>> round(-0.36, 1) -0.4
round()第二個參數(shù)可以是負(fù)數(shù):
>>> a = 13849 >>> round(a, -1) 12850 >>> round(a, -2) 13800
但是要注意,這里有兩個很奇怪的例子:
>>> round(2.5) 2 >>> round(0.5) 0
可以發(fā)現(xiàn),這里完全沒有按照我們所熟悉的四舍五入的取整規(guī)則來。這是因?yàn)?b>round()函數(shù)在應(yīng)對這種與兩個整數(shù)距離相同的情況時(shí),會取到最近的偶數(shù)上去。
同時(shí)官方文檔中還舉了一個例子,
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.
round(2.675, 2)的結(jié)果居然是2.67,這個的原因是浮點(diǎn)數(shù)表示是有誤差的,2.675在計(jì)算機(jī)上實(shí)際上不是準(zhǔn)確的2.675。
解釋一下浮點(diǎn)數(shù)問題首先我們要明確一個概念,計(jì)算機(jī)只能識別二進(jìn)制,也就是一堆1和0的組合,但是人類常用的卻是十進(jìn)制。
十進(jìn)制的數(shù)在計(jì)算機(jī)里就需要轉(zhuǎn)換成二進(jìn)制表示,在將十進(jìn)制整數(shù)轉(zhuǎn)為二進(jìn)制的時(shí)候,往往是將原數(shù)不斷除以2,直到商小于1,將每一次得到的余數(shù)逆序排列,就能得到這個整數(shù)的二進(jìn)制表示了。
到了小數(shù)部分,我們采用的是乘以2,取整數(shù)部分,直到小數(shù)部分為0,順序排列。但是有些特殊的數(shù)就要搞事情了。
0.1 * 2 = 0.2 => 0 0.2 * 2 = 0.4 => 0 0.4 * 2 = 0.8 => 0 0.8 * 2 = 1.6 => 1 0.6 * 2 = 1.2 => 1 0.2 * 2 = 0.4 => 0 0.4 * 2 = 0.8 => 0 0.8 * 2 = 1.6 => 1 ...
發(fā)現(xiàn)沒有,進(jìn)入無限循環(huán)了,也就是說整數(shù)中一些小數(shù),在二進(jìn)制表示的時(shí)候是無限循環(huán)小數(shù),但是在計(jì)算機(jī)中畢竟是用有限位來表示一個值的,這就造成了有些小數(shù)(浮點(diǎn)數(shù))在計(jì)算機(jī)中是被截掉部分的,這就是浮點(diǎn)數(shù)不精確的原因啦。
decimal如果你特別需要精確的數(shù)值,那么可以使用decimal模塊。當(dāng)然這是有性能代價(jià)的(有得必有失嘛)。
舉個例子:
>>> a = 4.2 >>> b = 2.1 >>> a + b 6.300000000000001 >>> (a+b) == 6.3 False # 這次試試decimal >>> from decimal import Decimal >>> a = Decimal("4.2") >>> b = Decimal("2.1") >>> a + b Decimal("6.3") >>> print(a+b) 6.3 >>> (a + b) == Decimal("6.3") True數(shù)值的輸出格式化
如果只是想讓數(shù)值以固定的位數(shù)輸出,那么是用不著round()的。
>>> a = 1.23456 >>> format(a, "0.2f") "1.23" >>> format(a, "0.3f") "1.234"
歡迎關(guān)注個人公眾號公子政的宅日常查看更多文章:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/43961.html
摘要:浮點(diǎn)數(shù)計(jì)算不光對整數(shù)運(yùn)算提供了支持,同樣對我們俗稱的小數(shù)也提供了便利的運(yùn)算。但要注意的一點(diǎn)是有些版本對于浮點(diǎn)數(shù)是位數(shù)限制的對比下面兩張圖,所以可能會出現(xiàn)溢出或者未知報(bào)錯,在真正開發(fā)的過程中,盡量不要寫這種代碼否則背鍋。 學(xué)習(xí)任何一種編程語言,包括但不限于C、C++、Java、Python,我...
摘要:創(chuàng)建數(shù)值列表上一篇文章列表處理下一篇文章字典處理可以產(chǎn)生一些列數(shù)值語法開始下標(biāo)包括結(jié)束下標(biāo)不包括步長實(shí)例結(jié)果利用將產(chǎn)生的數(shù)值轉(zhuǎn)化為列表實(shí)例結(jié)果列表解析快速生成數(shù)值列表語法實(shí)例實(shí)例結(jié)果 Python創(chuàng)建數(shù)值列表 上一篇文章:Python列表處理下一篇文章:Python字典處理 1、range range()可以產(chǎn)生一些列數(shù)值語法:range(開始下標(biāo)(包括),結(jié)束下標(biāo)(不包括)[,步長...
摘要:下文統(tǒng)一稱為數(shù)組是存儲單一數(shù)據(jù)類型的多維數(shù)組同語言數(shù)組直接保存數(shù)值而則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。動態(tài)數(shù)據(jù)類型與的數(shù)組和的這些不可變數(shù)據(jù)類型的適用場景等可變數(shù)據(jù)類型適用于需要不斷對原始數(shù)據(jù)進(jìn)行修改的場景。 showImg(https://segmentfault.com/img/remote/1460000018925396);Numpy,是python中的一個矩陣計(jì)算包,功能類似ma...
摘要:最近使用處理一些網(wǎng)絡(luò)相關(guān)的問題,被相關(guān)的一系列編碼問題搞得一頭霧水。與接下來是中對于字符串的處理。中的和在中,其類型規(guī)定了底層的數(shù)據(jù)結(jié)構(gòu),是位整數(shù)串,也即跟語言中的字符串類似。這些問題在中得到解決。 最近使用 Python 2 處理一些網(wǎng)絡(luò)相關(guān)的問題,被 Unicode, String 相關(guān)的一系列編碼問題搞得一頭霧水。在這里整理一下相關(guān)的概念吧。 ASCII Unicode UTF8...
摘要:程序用于在編程社群的成員之間交流這些想法。在編程中,我們處理兩種元素函數(shù)和數(shù)據(jù)。在中,我們可以使用賦值語句來建立新的綁定,它包含左邊的名稱和右邊的值。例如,它并不能處理賦值語句。這些圖解的必要部分是函數(shù)的表示。 1.2 編程元素 來源:1.2 The Elements of Programming 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 編程語言是操作計(jì)算機(jī)來執(zhí)行任務(wù)...
閱讀 1220·2021-11-22 15:22
閱讀 3923·2021-10-19 13:13
閱讀 3698·2021-10-08 10:05
閱讀 3360·2021-09-26 10:20
閱讀 3077·2019-08-29 14:21
閱讀 2264·2019-08-27 10:55
閱讀 1921·2019-08-26 10:31
閱讀 2643·2019-08-23 16:47