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 相关文章推荐
Pandas探索之高性能函数eval和query解析
Oct 28 Python
简单了解OpenCV是个什么东西
Nov 10 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
python读取和保存图片5种方法对比
Sep 12 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
python多线程扫描端口(线程池)
Sep 04 Python
python读取文件指定行内容实例讲解
Mar 02 Python
结束运行python的方法
Jun 16 Python
Python - 10行代码集2000张美女图
May 23 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
实用函数5
2007/11/08 PHP
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
Django中url的反向查询的方法
2018/03/14 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python代码过长的换行方法
2018/07/19 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
冰淇淋店的创业计划书
2014/02/07 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
预备党员党支部意见
2015/06/02 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP