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 相关文章推荐
linux环境下安装pyramid和新建项目的步骤
Nov 27 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
Python编程argparse入门浅析
Feb 07 Python
查看Django和flask版本的方法
May 14 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
python写日志文件操作类与应用示例
Jul 01 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python爬虫之遍历单个域名
Nov 20 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python selenium爬取微博数据代码实例
May 22 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 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
php strrpos()与strripos()函数
2013/08/31 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
JavaScript 原型继承
2011/12/26 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
一分钟理解js闭包
2016/05/04 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
Promise扫盲贴
2019/06/24 Javascript
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Python创建字典的八种方式
2019/02/27 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
生产总经理岗位职责
2013/12/19 职场文书
转预备党员政审材料
2014/02/06 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
安全协议书范本
2014/04/21 职场文书
党员公开承诺书内容
2014/05/20 职场文书
百年校庆感言
2015/08/01 职场文书
环保建议书作文400字
2015/09/14 职场文书