浅谈Python里面小数点精度的控制


Posted in Python onJuly 16, 2018

要求较小的精度

round()内置方法

这个是使用最多的,刚看了round()的使用解释,也不是很容易懂。round()不是简单的四舍五入的处理方式。

For the built-in types supporting round(), values are rounded to the closest multiple of 10 to the power minus ndigits; if two
multiples are equally close, rounding is done toward the even choice (so, for example, both round(0.5) and round(-0.5) are 0, and

round(1.5) is 2).

>>> round(2.5)
3.0
>>> round(-2.5)
-3.0
>>> round(2.675)
3.0
>>> round(2.675,2)
2.67

round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数。一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数这向上取舍。看下面的示例:

>>> round(2.555,2)
2.56
>>> round(2.565,2)
2.56
>>> round(2.575,2)
2.58
>>> round(2.585,2)
2.58

使用格式化

效果和round()是一样的。

>>> a = ("%.2f" % 2.555)
>>> a
'2.56'
>>> a = ("%.2f" % 2.565)
>>> a
'2.56'
>>> a = ("%.2f" % 2.575)
>>> a
'2.58'
>>> a = ("%.2f" % 2.585)
>>> a
'2.58'
>>> a = int(2.5)
>>> a
2

要求超过17位的精度分析

python默认的是17位精度,也就是小数点后16位,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过16位小数)的

时候该怎么做呢?

高精度使用decimal模块,配合getcontext

>>> from decimal import *
>>> print(getcontext())
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> b = Decimal(1)/Decimal(3)
>>> b
Decimal('0.33333333333333333333333333333333333333333333333333')
>>> c = Decimal(1)/Decimal(7)
>>> c
Decimal('0.14285714285714285714285714285714285714285714285714')
>>> float(c)
0.14285714285714285

默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。其实可以留意下context里面的这rounding=ROUND_HALF_EVEN 参数。ROUND_HALF_EVEN, 当half的时候,靠近

even.

使用格式化(不推荐)

>>> a = ("%.30f" % (1.0/3))
>>> a
'0.333333333333333314829616256247'

可以显示,但是不准确,后面的数字基本没有意义。

关于小数和取整

既然说到小数,就必然要说到整数。一般取整会用到这些函数:

round()

这个不说了,前面已经讲过了。一定要注意它不是简单的四舍五入,而是ROUND_HALF_EVEN的策略。

math模块的ceil(x)

取大于或者等于x的最小整数。

math模块的floor(x)

去小于或者等于x的最大整数。

>>> from math import ceil, floor
>>> round(2.5)
2
>>> ceil(2.5)
3
>>> floor(2.5)
2
>>> round(2.3)
2
>>> ceil(2.3)
3
>>> floor(2.3)
2

以上这篇浅谈Python里面小数点精度的控制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Socket编程入门教程
Jul 11 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python实现连续图文识别
Dec 18 Python
详解Python函数式编程—高阶函数
Mar 29 Python
pytorch打印网络结构的实例
Aug 19 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Python日志处理模块logging用法解析
May 19 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
Python脚本调试工具安装过程
Jan 11 Python
python 三边测量定位的实现代码
Apr 22 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
python爬取哈尔滨天气信息
Jul 14 #Python
You might like
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
js文件缓存之版本管理详解
2013/07/05 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
JS实现为表格动态添加标题的方法
2015/03/31 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
进一步了解Python中的XML 工具
2015/04/13 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
java中两个byte数组实现合并的示例
2018/05/09 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
django使用JWT保存用户登录信息
2020/04/22 Python
应届生自我鉴定
2013/12/11 职场文书
租房协议书
2014/04/10 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
网络舆情信息简报
2015/07/21 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js