浅谈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实现k均值算法示例(k均值聚类算法)
Mar 16 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
python字典排序实例详解
May 20 Python
django 创建过滤器的实例详解
Aug 14 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
python实现按长宽比缩放图片
Jun 07 Python
Python使用MyQR制作专属动态彩色二维码功能
Jun 04 Python
Python笔试面试题小结
Sep 07 Python
Python获取时间戳代码实例
Sep 24 Python
python中什么是面向对象
Jun 11 Python
python pandas dataframe 去重函数的具体使用
Jul 20 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获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
Javascript里使用Dom操作Xml
2006/09/20 Javascript
js格式化时间小结
2014/11/03 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
python基础教程之udp端口扫描
2014/02/10 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python实现决策树
2017/12/21 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Python-split()函数实例用法讲解
2020/12/18 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL