欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

python中浮點(diǎn)數(shù)四舍五入的問(wèn)題

昨天遇到一個(gè)問(wèn)題,在 6.6045 保留三位小數(shù)時(shí),使用 round() 函數(shù)進(jìn)行計(jì)算,我們希望得到 6.605,然而:

成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元墊江做網(wǎng)站,已為上家服務(wù),為墊江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

round(6.6045, 3)
6.604

網(wǎng)上有人說(shuō),因?yàn)樵谟?jì)算機(jī)里面,小數(shù)是不精確的,例如 1.115 在計(jì)算機(jī)中實(shí)際上是 1.114999999999999991182,所以當(dāng)你對(duì)這個(gè)小數(shù)精確到小數(shù)點(diǎn)后兩位的時(shí)候,實(shí)際上小數(shù)點(diǎn)后第三位是 4,所以四舍五入,結(jié)果為 1.11.

這種說(shuō)法,對(duì)了一半。

因?yàn)椴⒉皇撬械男?shù)在計(jì)算機(jī)中都是不精確的。例如 0.125 這個(gè)小數(shù)在計(jì)算機(jī)中就是精確的,它就是 0.125,沒(méi)有省略后面的值,沒(méi)有近似,它確確實(shí)實(shí)就是 0.125.

但是如果我們?cè)?Python 中運(yùn)行:

round(0.125, 2)
0.12

為什么在這里四舍了?

還有更奇怪的,另一個(gè)在計(jì)算機(jī)里面能夠精確表示的小數(shù) 0.375,我們來(lái)看看精確到小數(shù)點(diǎn)后兩位是多少:

round(0.375, 2)
0.38

為什么在這里又五入了?

解析

因?yàn)樵?Python3 里面,round 對(duì)小數(shù)的精確度采用了四舍六入五成雙的方式。

如果你寫過(guò)大學(xué)物理的實(shí)驗(yàn)報(bào)告,那么你應(yīng)該會(huì)記得老師講過(guò),直接使用四舍五入,最后的結(jié)果可能會(huì)偏高,所以需要使用奇進(jìn)偶舍的處理方法。

例如對(duì)于一個(gè)浮點(diǎn)數(shù) a.bcd,需要精確到小數(shù)點(diǎn)后兩位,那么就要看小數(shù)點(diǎn)后第三位:
?如果 d 小于 5,直接舍去
?如果 d 大于 5,直接進(jìn)位
?如果 d 等于 5:
? ?d 后面沒(méi)有數(shù)據(jù),且 c 為偶數(shù),那么不進(jìn)位,保留 c

? ?d 后面沒(méi)有數(shù)據(jù),且 c 為奇數(shù),那么進(jìn)位,c 變成 (c + 1)

? ?如果 d 后面還有非 0 數(shù)字,例如實(shí)際上小數(shù)為 a.bcdef,此時(shí)一定要進(jìn)位,c 變成 (c + 1)

關(guān)于奇進(jìn)偶舍,有興趣的朋友可以在維基百科搜索這兩個(gè)詞條:數(shù)值修約和奇進(jìn)偶舍。

所以,round 給出的結(jié)果如果跟設(shè)想的不一樣,那么需要考慮兩個(gè)原因:
1.你的這個(gè)小數(shù)在計(jì)算機(jī)中能不能被精確儲(chǔ)存?如果不能,那么它可能并沒(méi)有達(dá)到四舍五入的標(biāo)準(zhǔn),例如 1.115,它的小數(shù)點(diǎn)后第三位實(shí)際上是 4,當(dāng)然會(huì)被舍去。
2.如果你的這個(gè)小數(shù)在計(jì)算機(jī)中能被精確表示,那么,round 采用的進(jìn)位機(jī)制是奇進(jìn)偶舍,所以這取決于你要保留的那一位,它是奇數(shù)還是偶數(shù),以及它的下一位后面還有沒(méi)有數(shù)據(jù)。

回到最開(kāi)始的問(wèn)題,對(duì)于 6.6045 這個(gè)浮點(diǎn)數(shù),我們?cè)?Scheme 中查看一下它的精確形式:

(exact 6.6045)
3718002967371055/562949953421312

也就是說(shuō)它是不能被精確儲(chǔ)存的,大概表現(xiàn)為 6.60449999999999…的形式,因此四舍五入的時(shí)候得到了 6.604。

如何正確進(jìn)行四舍五入

如果要實(shí)現(xiàn)數(shù)學(xué)上的四舍五入,那么就需要使用 decimal 模塊。

具體用法參考官方文檔:https://docs.python.org/zh-cn/3.7/library/decimal.html

其中 quantize 的函數(shù)原型和文檔說(shuō)明,提到了可以通過(guò)指定 rounding 參數(shù)來(lái)確定進(jìn)位方式。如果沒(méi)有指定 rounding 參數(shù),那么會(huì)默認(rèn)使用上下文提供的進(jìn)位方式。

現(xiàn)在我們來(lái)查看一下默認(rèn)的上下文中的進(jìn)位方式是什么:

from decimal import getcontext
getcontext().rounding
'ROUND_HALF_EVEN'

ROUND_HALF_EVEN 實(shí)際上就是奇進(jìn)偶舍,如果要指定真正的四舍五入,那么我們需要在 quantize 中指定進(jìn)位方式為 ROUND_HALF_UP:

from decimal import Decimal, ROUND_HALF_UP
Decimal('0.125').quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
Decimal('0.13')

現(xiàn)在看起來(lái)一切都正常了。

有人可能會(huì)進(jìn)一步追問(wèn)一下,如果 Decimal 接收的參數(shù)不是字符串,而是浮點(diǎn)數(shù)會(huì)怎么樣呢?

來(lái)實(shí)驗(yàn)一下:

Decimal(0.125)
Decimal('0.125')

那是不是說(shuō)明,在 Decimal 的第一個(gè)參數(shù),可以直接傳浮點(diǎn)數(shù)呢?

我們換一個(gè)數(shù)來(lái)測(cè)試一下:

Decimal(11.245)
Decimal('11.2449999999999992184029906638897955417633056640625')

浮點(diǎn)數(shù) 11.245 和字符串’11.245’傳進(jìn)去以后的結(jié)果居然不一樣。

我們繼續(xù)在文檔中尋找答案。
python 中浮點(diǎn)數(shù)四舍五入的問(wèn)題

官方文檔已經(jīng)很清楚地說(shuō)明了,如果你傳入的參數(shù)為浮點(diǎn)數(shù),并且這個(gè)浮點(diǎn)值在計(jì)算機(jī)里面不能被精確存儲(chǔ),那么它會(huì)先被轉(zhuǎn)換為一個(gè)不精確的二進(jìn)制值,然后再把這個(gè)不精確的二進(jìn)制值轉(zhuǎn)換為等效的十進(jìn)制值。對(duì)于不能精確表示的小數(shù),當(dāng)你傳入的時(shí)候,Python 在拿到這個(gè)數(shù)前,這個(gè)數(shù)就已經(jīng)被轉(zhuǎn)成了一個(gè)不精確的數(shù)了。所以雖然參數(shù)傳入的是 11.245,但是 Python 拿到的實(shí)際上是 11.24499999999…

文章題目:python中浮點(diǎn)數(shù)四舍五入的問(wèn)題
本文鏈接:http://aaarwkj.com/article0/gjcooo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)商城網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、軟件開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
韩国午夜福利视频网站| 夜夜嗨精品免费视频播放| 亚洲最大五月六月丁香婷婷| 国产精精精精品欧美日韩| 无遮挡动漫网站免费观看| 国产深夜福利在线观看| 色人阁在线精品免费视频| 亚洲激情粉嫩中文字幕| 熟女一区二区中文字幕| 加勒比av免费在线播放| 日韩中文字幕专区在线| 精品国产亚洲av剧情| 成人又黄又爽大片在线观看| 精品一区二区三区亚洲| 九九久久精品久久久精品 | 亚洲最新一区二区在线观看| 亚洲女久久久噜噜噜综合| 久久成人午夜免费电影| 女厕所偷拍一区二区三区| 日本一区二区三区久久久| 视频久久这里只有精品| 亚洲日本一区二区三区电影| 视频一区欧美日韩精品| 中文字幕人妻少妇美臀| 少妇人妻精品一区三区二区| 国产二区三区在线播放| 亚洲另类综合日韩一区| 国产三级三级在线观看| 久久亚洲一本综合久久| 麻豆人妻一区二区三区| 欧美香蕉高清视频免费| 99久热在线精品视频| 黑人一区二区三区在线| 色婷婷亚洲综合色一区二区| 国产亚洲加勒比久久精品| 97在线亚洲欧美视频| 国产精品国产三级国产普通话99| 亚洲精品熟女国产国产老熟女| 日本理论高清在线观看| 夫妻在线观看高清视频| 欧美色欧美亚洲另类视频|