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实现的数据结构与算法之链表详解
Apr 22 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
django_orm查询性能优化方法
Aug 20 Python
对python周期性定时器的示例详解
Feb 19 Python
django认证系统 Authentication使用详解
Jul 22 Python
详解Python3定时器任务代码
Sep 23 Python
python实现手势识别的示例(入门)
Apr 15 Python
python如何进入交互模式
Jul 06 Python
通过案例解析python鸭子类型相关原理
Oct 10 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《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
python非递归全排列实现方法
2017/04/10 Python
Anaconda入门使用总结
2018/04/05 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Django多数据库联用实现方法解析
2020/11/12 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
电气自动化自荐信
2013/10/10 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
简历的自我评价
2014/02/03 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
如何写通讯稿
2015/07/22 职场文书