0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python的四舍五入如何去實現(xiàn)呢

夏日余暉 ? 來源:Harmony技術(shù)專家 ? 作者:Harmony技術(shù)專家 ? 2022-10-12 11:19 ? 次閱讀

Python 的四舍五入,還真有點小麻煩。

1、使用 round

大多數(shù)情況下,我們會使用 round 來保留小數(shù),但這并不符合我們在數(shù)學知識里的規(guī)則。

round(number[,ndigits])

round() 把 number(通常是浮點數(shù)) 按如下規(guī)則(Python3)進行四舍五入的:

先說下 ndigits 不為 0 的情況:

如果保留位數(shù)的后一位小于等于 4,則舍去,如 round(5.214,2) = 5.21

如果保留位數(shù)的后一位等于 5,且該位數(shù)后面沒有數(shù)字,則不進位,如 round(5.215,2) = 5.21

如果保留位數(shù)的最后一位等于 5,且該位數(shù)后面有數(shù)字,則進位,如 round(5.2151,2) = 5.22

如果保留位數(shù)的最后一位大于等于 6 ,則進位。如 round(5.216,2) = 5.22

pYYBAGNGMbWACbu7AABQ_srL7p0219.png

但是上述規(guī)則 2 也有例外,比如:

poYBAGNGMcaAAtltAAAsBFtEigA081.png

究其原因,浮點數(shù)用用二進制表示的時候只能表示近似值,雖然我們看到的是 0.645,實際上 Python 存儲的是 0.645000000000000017763568394002504646778106689453125,Python 是按照 IEEE754 標準存儲浮點數(shù)的。

再說下 ndigits 為 0 或 None 的情況:

如果保留位數(shù)的后一位小于等于 4,則舍去,如 round(1.4) = 1

如果保留位數(shù)的后一位等于 5,且后面沒有數(shù)字,則取最近的偶數(shù),如 round(1.5)=2,round(2.5)=2

如果保留位數(shù)的后一位等于 5,且后面有數(shù)字,則近位,如 round(2.51)=3

如果保留位數(shù)的最后一位大于等于 6 ,則進位。如 round(1.6) = 2

pYYBAGNGMd-AK2V8AABIAXzTvvY705.png

請注意, f 字符串的保留結(jié)果與 round 一致:

pYYBAGNGMfGAWET8AAAskhIuCfA979.png

那么如何獲得和數(shù)學上的四舍五入規(guī)則一致的方法呢?請使用方法二:

2、使用 Decimal

這種方法有個前提,那就是必須先把小數(shù)轉(zhuǎn)換成字符串,這樣才可以精確的表示浮點數(shù)。

pYYBAGNGMgOAYrecAACsIjyFzsQ078.png

以上程序的輸出如下:

poYBAGNGMhWAcDI6AAAqS_zOmzo317.png

完全符合我們數(shù)學上的四舍五入。

最后的話

浮點數(shù)在二進制的表示方法中只能表示近似值。了解了浮點數(shù)表示法之后,再看四舍五入,就不會覺得那么奇怪了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84296
收藏 人收藏

    評論

    相關(guān)推薦

    LabVIEW如何實現(xiàn)四舍五入

    LabVIEW默認的實現(xiàn)的是科學四舍五入,而不是真正的、傳統(tǒng)的四舍五入,怎樣把2.5四舍五入為3?LabVIEW算出居然是2,并且試了好幾種方法都沒有辦法得到3,真是太無語了。
    發(fā)表于 01-25 00:16

    怎么讓1位小數(shù)四舍五入?

    就是保留一位小數(shù),多余的四舍五入。不要前面板設(shè)置的那種,labview可以做得到嗎?大神幫幫忙~!
    發(fā)表于 11-29 15:21

    在stm32中做float數(shù)的乘法運算,結(jié)果小數(shù)部分總是被四舍五入

    我在stm32中做float數(shù)的乘法運算,結(jié)果小數(shù)部分總是被四舍五入了,感覺好奇怪哦,代碼如下 float xreal[1024]={0}; float yimag[1024]={0}; float prodreal,prodimag,temp; for(i=0;i
    發(fā)表于 03-14 06:35

    請問如何將匯編寫的函數(shù)變成內(nèi)聯(lián)函數(shù)?

    比如TI提供的四舍五入函數(shù)rnd_SP_RS.asm,怎么做成內(nèi)聯(lián)函數(shù)?這樣比較省時間。謝謝!
    發(fā)表于 05-07 09:32

    labview 45

    labview沒有現(xiàn)存的四舍五入的程序,附件是保留小數(shù)點后兩位,大家可以參考著改成可以設(shè)置小數(shù)位的VI。
    發(fā)表于 01-14 09:51

    如何在iMX8M mini上捕捉奇怪的分辨率?

    我正在為 iMX8M 迷你模塊開發(fā)傳感器驅(qū)動程序。此傳感器允許具有奇數(shù)高度值的分辨率,例如寬度=240 x 高度=135。我注意到每次輸入奇數(shù)高度時,該值都會四舍五入到下一個偶數(shù),在本例中,從 135 四舍五入到 136。這是一些特定于平臺的限制嗎?有什么理由不支持奇怪的
    發(fā)表于 03-24 07:25

    LabView設(shè)計程序,利用“六入成雙”的方法實現(xiàn)數(shù)字的舍入功能。

    請教各位大佬,目前只能實現(xiàn)四舍五入” 原理:“465湊偶”,這里“”是指≤4 時舍去,\"六\"是指≥6時進上,\"
    發(fā)表于 05-13 10:56

    單片機取下整怎么四舍五入

    單片機取下整怎么四舍五入
    發(fā)表于 09-26 08:17

    Xilinx平方根IP核的整形平方根算法

    Round Pos Inf:四舍五入,+0.5之后四舍五入,在負數(shù)時和第三種有區(qū)別。
    發(fā)表于 07-12 08:38 ?2626次閱讀
    Xilinx平方根IP核的整形平方根算法

    西門子PLC中四舍五入和截取函數(shù)顯示

    四舍五入和截取函數(shù)也屬于數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。下表顯示了這些函數(shù)的名稱、數(shù)據(jù)類型(輸入?yún)?shù)和函數(shù)值)和任務。 “取整”指令用于將輸入 IN 的值取整為最接近的整數(shù)。該指令將輸入 IN 的值解釋為浮點數(shù)
    的頭像 發(fā)表于 08-16 16:08 ?6093次閱讀

    四舍五入的數(shù)字、典型規(guī)格和模擬的危險

    發(fā)表于 11-17 12:41 ?0次下載
    <b class='flag-5'>四舍五入</b>的數(shù)字、典型規(guī)格和模擬的危險

    四舍五入數(shù)字、典型規(guī)格和模擬的危險

    本教程強調(diào)了謹慎設(shè)計電路的重要性,并仔細思考設(shè)計的各個方面。很多時候,工程師被數(shù)據(jù)手冊的規(guī)格引入歧途,要么是因為它們是四舍五入的,要么是因為工程師只記住了典型規(guī)格。無論出現(xiàn)哪個陷阱,設(shè)計都可能產(chǎn)生災難性的結(jié)果。本文檔解釋了為什么依賴四舍五入的數(shù)字和典型規(guī)格,以及支持仿真而
    的頭像 發(fā)表于 02-10 10:42 ?796次閱讀
    <b class='flag-5'>四舍五入</b>數(shù)字、典型規(guī)格和模擬的危險

    ROUND函數(shù)是什么意思?

    ROUND函數(shù)是Excel中的一個基本函數(shù),作用按指定的位數(shù)對數(shù)值進行四舍五入,語法是ROUND(number,num_digits)。
    的頭像 發(fā)表于 05-25 15:22 ?2.3w次閱讀
    ROUND函數(shù)是什么意思?

    FPGA加法截位處理方法介紹

    本模塊實現(xiàn)輸入與輸出位寬相同數(shù)據(jù)加法,并對結(jié)果進行四舍五入截位,對標matlab round函數(shù)。
    的頭像 發(fā)表于 04-18 16:53 ?680次閱讀

    接地探針如何計算

    安培數(shù)計算:對于每1A的電流(四舍五入到下一個最高整數(shù)),需要一個探針。
    的頭像 發(fā)表于 04-29 09:39 ?571次閱讀