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实现的各种排序算法代码
Mar 04 Python
在Python下尝试多线程编程
Apr 28 Python
python搜索指定目录的方法
Apr 29 Python
python安装Scrapy图文教程
Aug 14 Python
Python实现k-means算法
Feb 23 Python
python如何在循环引用中管理内存
Mar 20 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
NumPy统计函数的实现方法
Jan 21 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 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
yii框架中的Url生产问题小结
2012/01/16 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php截取视频指定帧为图片
2016/05/16 PHP
php进程间通讯实例分析
2016/07/11 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
javascript中"/"运算符常见错误
2010/10/13 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
JQuery获取与设置HTML元素的内容或文本的实现代码
2014/06/20 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
Python实现批量下载文件
2015/05/17 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
详解python读取和输出到txt
2019/03/29 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
python tkinter控件布局项目实例
2019/11/04 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python中and和or如何使用
2020/05/28 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
元旦红领巾广播稿
2014/02/19 职场文书
具结保证书范本
2015/05/11 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
windows安装python超详细图文教程
2021/05/21 Python