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