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基于multiprocessing的多进程创建方法
Jun 04 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
python代码中怎么换行
Jun 17 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
python3实现简单飞机大战
Nov 29 Python
python xlsxwriter模块的使用
Dec 24 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
php记录日志的实现代码
2011/08/08 PHP
php分页代码学习示例分享
2014/02/20 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
基于PHP制作验证码
2016/10/12 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
jquery radio 操作代码
2011/03/16 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
使用angular写一个hello world
2015/01/23 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
python字符串连接方法分析
2016/04/12 Python
python计算日期之间的放假日期
2018/06/05 Python
Django中的forms组件实例详解
2018/11/08 Python
python实现简单名片管理系统
2018/11/30 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
用python对oracle进行简单性能测试
2020/12/05 Python
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
.net工程师笔试题
2012/06/09 面试题
工业学校毕业生自荐信范文
2014/01/03 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
图书馆标语
2014/06/19 职场文书
司考复习计划
2015/01/19 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android