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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
深入解析Python的Tornado框架中内置的模板引擎
Jul 11 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
python实现逐个读取txt字符并修改
Dec 24 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
如何使用Cython对python代码进行加密
Jul 08 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
JS backgroundImage控制
2009/05/19 Javascript
js点击选择文本的方法
2015/02/09 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
Vue实现简单分页器
2018/12/29 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Python基本语法经典教程
2016/03/11 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
详解python中*号的用法
2019/10/21 Python
python中自带的三个装饰器的实现
2019/11/08 Python
python str字符串转uuid实例
2020/03/03 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
结构和类有什么异同
2012/07/16 面试题
简述安装Slackware Linux系统的过程
2012/05/08 面试题
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
大学生个人推荐信范文
2013/11/25 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
python爬虫请求库httpx和parsel解析库的使用测评
2021/05/10 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技
MySQL存储过程及语法详解
2022/08/05 MySQL