python中小數(shù)點(diǎn)后取2位(四舍五入)及取2位(四舍五不入)的方法
一.小數(shù)點(diǎn)后取2位(四舍五入)的方法
方法一:round()函數(shù)
1.首先不推薦使用這個(gè)函數(shù)、python2和python3對(duì)應(yīng)的效果還不太一樣,使用的時(shí)候慎重!
2.也感謝評(píng)論區(qū)網(wǎng)友的提示,有人說(shuō)具體用法是**四舍六入五成雙**。但是發(fā)現(xiàn)也不太對(duì),還是有坑的,各位看官請(qǐng)看?
3.歡迎各位來(lái)補(bǔ)充?
四舍六入五成雙, 四舍六入五湊偶的意思, 根據(jù)百度詞條的解釋如下:
- (1)當(dāng)精確位后面一位的數(shù)字是1-4的時(shí)候,舍去
- (2)當(dāng)精確位后面一位的數(shù)字是6-9的時(shí)候,進(jìn)1位
- (3)當(dāng)精確位后面一位的數(shù)字是5的,此時(shí)需要看這個(gè)5后面是否還有值。如果5后面有值(0忽略),則直接進(jìn)位;
- (4)如果5后面沒(méi)值或值為0,則需要判斷5前面的值是偶數(shù)還是奇數(shù)。
- (5)如果5前面是偶數(shù),不進(jìn)位;如果是奇數(shù),進(jìn)位。
- 為了方便大家的理解,各種情況都測(cè)試一下。默認(rèn)都是按照:小數(shù)點(diǎn)后2位有效數(shù)字取值
- 小數(shù)點(diǎn)第二位就是精確位,小數(shù)點(diǎn)后第三位就是我們重點(diǎn)關(guān)注的位數(shù)
# (1)、(2)規(guī)則 a = 1.45321 b = 2.45678 print(round(a, 2)) print(round(b, 2))
# 打印內(nèi)容
1.45
2.46
# (3)規(guī)則 a = 1.12500002 b = 2.15500002 c = 2.15500000 print(round(a, 2)) print(round(b, 2)) print(round(c, 2))
# 打印內(nèi)容
1.13
2.16
2.15
小數(shù)點(diǎn)后第三位是我們重點(diǎn)關(guān)注的,而第三位后面還有值,那直接進(jìn)位。上面案例中2.155后面的幾個(gè)0,都忽略。
# (4)、(5)規(guī)則 print(round(1.205, 2)) print(round(1.215, 2)) print(round(1.225, 2)) print(round(1.235, 2)) print(round(1.245, 2)) print(round(1.255, 2)) print(round(1.265, 2)) print(round(1.275, 2)) print(round(1.285, 2)) print(round(1.295, 2))
# 打印內(nèi)容
1.21 # 1.205---進(jìn)位
1.22 # 1.215---進(jìn)位
1.23 # 1.225---進(jìn)位
1.24 # 1.235---進(jìn)位
1.25 # 1.245---進(jìn)位
1.25 # 1.255---未進(jìn)位
1.26 # 1.265---未進(jìn)位
1.27 # 1.275---未進(jìn)位
1.28 # 1.285---未進(jìn)位
1.29 # 1.295---未進(jìn)位
通過(guò)以上打印結(jié)果發(fā)現(xiàn), (4)、(5)規(guī)則根本就不適用上述情況??偨Y(jié)規(guī)律如下:
如果精確位后面的一位是5,且5后面沒(méi)其他數(shù)值,此時(shí)精確位如果是0—4,則進(jìn)位(5種情況)。如果是5–9則不進(jìn)位(5種情況)。
我的理解是,不同語(yǔ)言、不同函數(shù)的處理都是細(xì)微的差別。但總歸把進(jìn)位和不進(jìn)位的概率,都是平均分布的。
最終的規(guī)律總結(jié)如下:
- (1)當(dāng)精確位后面一位的數(shù)字是1-4的時(shí)候,舍去
- (2)當(dāng)精確位后面一位的數(shù)字是6-9的時(shí)候,進(jìn)1位
- (3)當(dāng)精確位后面一位的數(shù)字是5的,此時(shí)需要看這個(gè)5后面是否還有值。如果5后面有值(0忽略),則直接進(jìn)位;
- (4)如果5后面沒(méi)值或值為0,則需要判斷精確位的區(qū)間,如果是0—4,則進(jìn)位。如果是5–9,則不進(jìn)位。
各位看官,不知道我解釋的夠清楚了嗎?如果感覺(jué)還行,幫忙點(diǎn)個(gè)贊吧?。?!
方法二:’%.2f’ %f 方法
??f = 1.23456 print('%.4f' % f) print('%.3f' % f) print('%.2f' % f)
結(jié)果:
1.2346
1.235
1.23
- (1)原本以為:這個(gè)方法是最常規(guī)的方法,方便實(shí)用,居家旅行必備!
- (2)但是…
f = 0.625 print('%.2f' % f) # 結(jié)果:0.62
具體是否進(jìn)位,有個(gè)概率問(wèn)題,感興趣的朋友可以看看評(píng)論里面的信息。
方法三:Decimal()函數(shù)
from decimal import Decimal aa = Decimal('5.026').quantize(Decimal('0.00')) bb = Decimal('3.555').quantize(Decimal('0.00')) cc = Decimal('3.545').quantize(Decimal('0.00')) print(aa) print(bb) print(cc)
結(jié)果:
5.03
3.56
3.54
decimal這個(gè)模塊在很少用,如上圖中,3.555結(jié)果為3.56,而3.545結(jié)果變?yōu)?.54,一個(gè)5進(jìn)位了,一個(gè)是5沒(méi)進(jìn)位,具體原因不詳。
所以不推薦使用這個(gè)方法!??!
二.小數(shù)點(diǎn)后取2位(四舍五不入)的方法
通過(guò)計(jì)算的途徑,很難將最終結(jié)果截取2位,我們直接想到的就是如果是字符串,直接截取就可以了。
例如
num = '1234567' #字符串num print(num[:3]) 結(jié)果: 123
如果是123.456取2位小數(shù)(截取2位小數(shù)),值需要把小數(shù)點(diǎn)右邊的當(dāng)做字符串截取即可
partition()函數(shù)(將字符串根據(jù)字符串切割):
http://www.runoob.com/python/att-string-partition.html
num = '123.4567' num_str = num.partition(".") print(num_str) 結(jié)果: ('123', '.', '4567') # 三個(gè)元素的元祖
拼接字符串:format()函數(shù)的使用
http://www.dbjr.com.cn/python/2968515r5.htm
方法一:
def get_two_float(f_str, n): a, b, c = f_str.partition('.') c = c[:n] return ".".join([a, c]) num = "123.4567" #(1)隱患一,傳入函數(shù)的是字符串 print(get_two_float(num, 2)) num2 = '123.4' # (2)隱患二,如果傳入的字符串小數(shù)位小于最終取的位數(shù) print(get_two_float(num2, 2))
結(jié)果:
123.45
123.4
最終版本:
def get_two_float(f_str, n): f_str = str(f_str) # f_str = '{}'.format(f_str) 也可以轉(zhuǎn)換為字符串 a, b, c = f_str.partition('.') c = (c+"0"*n)[:n] # 如論傳入的函數(shù)有幾位小數(shù),在字符串后面都添加n為小數(shù)0 return ".".join([a, c]) num = 123.4567 print(get_two_float(num, 2)) num2 = 123.4 print(get_two_float(num2, 2))
結(jié)果:
123.45
123.40
總結(jié)
到此這篇關(guān)于python中小數(shù)點(diǎn)后取2位(四舍五入)及取2位(四舍五不入)的文章就介紹到這了,更多相關(guān)python小數(shù)點(diǎn)后取2位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)內(nèi)存泄露排查的示例詳解
一般在python代碼塊的調(diào)試過(guò)程中會(huì)使用memory-profiler、filprofiler、objgraph等三種方式進(jìn)行輔助分析,今天這里主要介紹使用objgraph對(duì)象提供的函數(shù)接口來(lái)進(jìn)行內(nèi)存泄露的分析,感興趣的可以了解一下2023-01-01Python中識(shí)別圖片/滑塊驗(yàn)證碼準(zhǔn)確率極高的ddddocr庫(kù)詳解
驗(yàn)證碼的種類(lèi)有很多,它是常用的一種反爬手段,包括:圖片驗(yàn)證碼,滑塊驗(yàn)證碼,等一些常見(jiàn)的驗(yàn)證碼場(chǎng)景。這里推薦一個(gè)簡(jiǎn)單實(shí)用的識(shí)別驗(yàn)證碼的庫(kù)?ddddocr?(帶帶弟弟ocr)庫(kù),希望大家喜歡2023-02-02python 根據(jù)列表批量下載網(wǎng)易云音樂(lè)的免費(fèi)音樂(lè)
這篇文章主要介紹了python 根據(jù)列表下載網(wǎng)易云音樂(lè)的免費(fèi)音樂(lè),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12python tkinter與Mysql數(shù)據(jù)庫(kù)交互實(shí)現(xiàn)賬號(hào)登陸
本文主要介紹了python tkinter與Mysql數(shù)據(jù)庫(kù)交互實(shí)現(xiàn)賬號(hào)登陸,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01基于numpy.random.randn()與rand()的區(qū)別詳解
下面小編就為大家分享一篇基于numpy.random.randn()與rand()的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04解決python3 urllib 鏈接中有中文的問(wèn)題
今天小編就為大家分享一篇解決python3 urllib 鏈接中有中文的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python判斷文件是否存在,不存在就創(chuàng)建一個(gè)的實(shí)例
今天小編就為大家分享一篇python判斷文件是否存在,不存在就創(chuàng)建一個(gè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02