python 正確保留多位小數(shù)的實(shí)例
python自帶的float函數(shù)在保留兩位小數(shù)的時(shí)候不夠準(zhǔn)確容易出現(xiàn)誤差,而(‘%.2f' % a)的方式是將數(shù)字轉(zhuǎn)成了字符串類型,無法進(jìn)行數(shù)字運(yùn)算,所以這里我們將封裝一個(gè)方法來實(shí)現(xiàn)正確的保留多位小數(shù)。
from functools import reduce def str2float(strf): def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] def char2int(x, y): return 10 * x + y tstr = strf.split('.') hightre = reduce(char2int, map(char2num, tstr[0])) if len(tstr)>1: lowre = reduce(char2int, map(char2num, tstr[1]))*(0.1**len(tstr[1])) else: lowre = 0 return hightre + lowre
從上述代碼我們引用了reduce函數(shù)(python2.7不需要導(dǎo)入)配合map內(nèi)置函數(shù)來實(shí)現(xiàn);
char2num函數(shù)主要是將字符串類似轉(zhuǎn)為對(duì)應(yīng)的數(shù)字類型;
char2int函數(shù)實(shí)現(xiàn)左側(cè)的數(shù)字乘以10后加上右側(cè)數(shù)字,比如char2int(1,2)-> 12;
tstr是將高位數(shù)和低位數(shù)通過”.”隔開;
hightre是處理高位數(shù),即非小數(shù)位部分,tstr[0]將左側(cè)的數(shù)字通過char2num函數(shù)轉(zhuǎn)成數(shù)字類型,作為單個(gè)單個(gè)的數(shù)字,如(”123.456”)將小數(shù)點(diǎn)左側(cè)的部分轉(zhuǎn)為(1,2,3),通過char2int函數(shù)轉(zhuǎn)為(((110+2)10)+3) -> 123;
lowre是處理低位數(shù),即小數(shù)位部分,tstr[1]將右側(cè)的數(shù)字通過char2num函數(shù)轉(zhuǎn)成數(shù)字類型,作為單個(gè)單個(gè)的數(shù)字,如(”123.456”)將小數(shù)點(diǎn)右側(cè)的部分轉(zhuǎn)為(4,5,6),通過char2int函數(shù)轉(zhuǎn)為(((410+5)10)+6) -> 456,由于是小數(shù)位所以要乘以0.1的N次方(N=小數(shù)位的位數(shù)),(456(0.10.1*0.1)) -> 0.456;
最后返回高位數(shù)拼接低位數(shù),即123.456的浮點(diǎn)類型;
PS:經(jīng)過試驗(yàn)發(fā)現(xiàn),使用該方法最多可支持12位數(shù)字,即高位數(shù)和低位數(shù)總位數(shù)在12位以內(nèi)可以正常顯示;
以上這篇python 正確保留多位小數(shù)的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python 除法保留兩位小數(shù)點(diǎn)的方法
- python格式化輸出保留2位小數(shù)的實(shí)現(xiàn)方法
- python保留小數(shù)位的三種實(shí)現(xiàn)方法
- python中round函數(shù)保留兩位小數(shù)的方法
- Python如何保留float類型小數(shù)點(diǎn)后3位
- python保留兩位小數(shù)的3種方法實(shí)例
- python保留小數(shù)函數(shù)的幾種使用總結(jié)
- python保留若干位小數(shù)?format與round的使用區(qū)別
- Python保留指定位數(shù)小數(shù)的5種方法總結(jié)
- 如何利用Python保留指定位數(shù)的小數(shù)
- Python除法保留兩位小數(shù)點(diǎn)的三種方法實(shí)現(xiàn)
- python保留小數(shù)點(diǎn)位數(shù)的多種方式(附demo)
- python保留兩位小數(shù)的五種方法
- python實(shí)現(xiàn)保留小數(shù)位數(shù)的3種方法
相關(guān)文章
jupyter notebook運(yùn)行代碼沒反應(yīng)且in[ ]沒有*
本文主要介紹了jupyter notebook運(yùn)行代碼沒反應(yīng)且in[ ]沒有*,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03pytorch cnn 識(shí)別手寫的字實(shí)現(xiàn)自建圖片數(shù)據(jù)
這篇文章主要介紹了pytorch cnn 識(shí)別手寫的字實(shí)現(xiàn)自建圖片數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05基于TensorFlow的CNN實(shí)現(xiàn)Mnist手寫數(shù)字識(shí)別
這篇文章主要為大家詳細(xì)介紹了基于TensorFlow的CNN實(shí)現(xiàn)Mnist手寫數(shù)字識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06python通過elixir包操作mysql數(shù)據(jù)庫實(shí)例代碼
這篇文章主要介紹了python通過elixir包操作mysql數(shù)據(jù)庫,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python操作word實(shí)現(xiàn)添加文字或圖片水印
這篇文章主要為大家詳細(xì)介紹了如何使用Spire.Doc for Python在程序中的輕松添加文字和圖像水印到Word文檔,感興趣的小伙伴可以跟隨小編一起了解一下2023-10-10