日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!

發(fā)布時(shí)間:2024/9/27 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

四舍五入就用round( )?Python四舍五入的正確打開(kāi)方式!

2018-09-22 21:40

閱讀數(shù) 4

<>round( )函數(shù)簡(jiǎn)介

菜鳥(niǎo)教程中介紹到,round() 函數(shù)作用就是,返回浮點(diǎn)數(shù)x的四舍五入值。

> round( x [, n] )

參數(shù)x,n均為數(shù)值表達(dá)式,返回值為x的四舍五入值。n為保留的小數(shù)位數(shù),不加n則只保留x四舍五入后的整數(shù)部分。

>>> round(2.3) 2 >>> round(2.45, 1) 2.5

<>特殊情況

上面的結(jié)果并沒(méi)有錯(cuò)誤,這里再用2.675測(cè)試一下:

>>> round(2.675, 2) 2.67

顯然結(jié)果不符合四舍五入的規(guī)則。為什么會(huì)這樣呢?原因是:round()函數(shù)只有一個(gè)參數(shù),不指定位數(shù)的時(shí)候,返回一個(gè)整數(shù),而且是最靠近的整數(shù),類似于四舍五入,當(dāng)指定取舍的小數(shù)點(diǎn)位數(shù)的時(shí)候,一般情況也是使用四舍五入的規(guī)則,但是碰到.5的情況時(shí),如果要取舍的位數(shù)前的小數(shù)是奇數(shù),則直接舍棄,如果是偶數(shù)則向上取舍。

這也就解釋了上述現(xiàn)象。可這樣一來(lái)用round()函數(shù)取浮點(diǎn)數(shù)的四舍五入值不就變得不可靠了嘛?這樣的函數(shù)設(shè)計(jì)的意義何在?網(wǎng)上搜了一圈答案,覺(jué)得這個(gè)說(shuō)法比較準(zhǔn)確:

python3(注意python2 和

3的round()是不一樣的,這里僅以python3作說(shuō)明)中round()對(duì)浮點(diǎn)數(shù)的取舍遵循的是“四舍六入五平分”,“五平分”就是根據(jù)取舍的位數(shù)前的小數(shù)奇偶性來(lái)判斷,奇偶平分,符合公平性原則(四舍五入不是公平的),這樣一來(lái)也就保證了在數(shù)據(jù)量較大的情況下,篩選數(shù)據(jù)的真實(shí)性。(數(shù)學(xué)渣,不知道這樣理解對(duì)否……)

為什么需要平分呢?原因就是部分小數(shù)無(wú)法用二進(jìn)制完整表示,如1.15,轉(zhuǎn)為二進(jìn)制將是很長(zhǎng)的一串?dāng)?shù)字:

1.0010011001100110011001100110011001100110011001100110011

這可不是簡(jiǎn)單的幾個(gè)字節(jié)就能存放下的。因此這里就出現(xiàn)了取舍的問(wèn)題。

那么正確的四舍五入是否無(wú)法實(shí)現(xiàn)了呢?當(dāng)然是有解決辦法的。比如,當(dāng)你需要四舍五入保留兩位小數(shù)的時(shí)候,可以將數(shù)值乘以100再除以100.0:

>>> round(2.675 * 100)/100.0 2.68

這樣可以解決部分浮點(diǎn)數(shù)四舍五入的問(wèn)題。為什么是部分呢?筆者發(fā)現(xiàn):

>>> round(2.135*100)/100.0 2.13

檢驗(yàn)下過(guò)程:

>>> 2.135*100 213.49999999999997

WTF!是精度問(wèn)題嘛!

>>> Decimal(2.135)*100 Decimal('213.4999999999999786837179272')

無(wú)法理解是不是!!二進(jìn)制的世界正常人真的不懂,盼望一下未來(lái)有可以直接計(jì)算十進(jìn)制的硬件誕生吧。

<>總結(jié)

在用round()函數(shù)進(jìn)行四舍五入時(shí),如果你對(duì)結(jié)果有十足把握,并且這就是你想要的結(jié)果,那就放心大膽地使用。不然就老老實(shí)實(shí)寫(xiě)個(gè)函數(shù)來(lái)實(shí)現(xiàn)吧,這不是什么難事。

總結(jié)

以上是生活随笔為你收集整理的python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。