python 正确保留多位小数的实例


Posted in Python onJuly 16, 2018

python自带的float函数在保留两位小数的时候不够准确容易出现误差,而(‘%.2f' % a)的方式是将数字转成了字符串类型,无法进行数字运算,所以这里我们将封装一个方法来实现正确的保留多位小数。

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函数(python2.7不需要导入)配合map内置函数来实现;

char2num函数主要是将字符串类似转为对应的数字类型;

char2int函数实现左侧的数字乘以10后加上右侧数字,比如char2int(1,2)-> 12;

tstr是将高位数和低位数通过”.”隔开;

hightre是处理高位数,即非小数位部分,tstr[0]将左侧的数字通过char2num函数转成数字类型,作为单个单个的数字,如(”123.456”)将小数点左侧的部分转为(1,2,3),通过char2int函数转为(((110+2)10)+3) -> 123;

lowre是处理低位数,即小数位部分,tstr[1]将右侧的数字通过char2num函数转成数字类型,作为单个单个的数字,如(”123.456”)将小数点右侧的部分转为(4,5,6),通过char2int函数转为(((410+5)10)+6) -> 456,由于是小数位所以要乘以0.1的N次方(N=小数位的位数),(456(0.10.1*0.1)) -> 0.456;

最后返回高位数拼接低位数,即123.456的浮点类型;

PS:经过试验发现,使用该方法最多可支持12位数字,即高位数和低位数总位数在12位以内可以正常显示;

以上这篇python 正确保留多位小数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python如何实现文本转语音
Aug 08 Python
Python正则简单实例分析
Mar 21 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
详解基于django实现的webssh简单例子
Jul 17 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
Python元组常见操作示例
Feb 19 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
python中栈的原理及实现方法示例
Nov 27 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
python制作微博图片爬取工具
Jan 16 Python
浅谈Python里面小数点精度的控制
Jul 16 #Python
详解Django中间件执行顺序
Jul 16 #Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 #Python
python 不以科学计数法输出的方法
Jul 16 #Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 #Python
Python中的Django基本命令实例详解
Jul 15 #Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 #Python
You might like
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php下使用iconv需要注意的问题
2010/11/20 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
hammer.js实现图片手势放大效果
2017/08/29 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
django用户登录和注销的实现方法
2018/07/16 Python
parser.add_argument中的action使用
2020/04/20 Python
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
机电工程学生自荐信范文
2013/12/07 职场文书
学校课外活动总结
2014/05/08 职场文书
五好关工委申报材料
2014/05/31 职场文书
自我管理的活动方案
2014/08/25 职场文书
小学假期安全广播稿
2014/09/28 职场文书
党员转正大会主持词
2015/07/02 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript