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线程详解
Jun 24 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
如何基于Python实现数字类型转换
Feb 07 Python
python常用运维脚本实例小结
Feb 14 Python
python实现人机五子棋
Mar 25 Python
关于python 跨域处理方式详解
Mar 28 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
分享3个非常实用的 Python 模块
Mar 03 Python
python神经网络 使用Keras构建RNN训练
May 04 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php 日期时间处理函数小结
2009/12/18 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python分治法定义与应用实例详解
2017/07/28 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
python操作gitlab API过程解析
2019/12/27 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
Python创建自己的加密货币的示例
2021/03/01 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
运动会开幕式邀请函
2014/01/22 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
开学典礼致辞
2015/07/29 职场文书
开学随笔
2015/08/15 职场文书