浅谈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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
python基于xml parse实现解析cdatasection数据
Sep 30 Python
在Python的Django框架中使用通用视图的方法
Jul 21 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
python调用自定义函数的实例操作
Jun 26 Python
python pandas 时间日期的处理实现
Jul 30 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
python实现超级玛丽游戏
Mar 18 Python
Python检测端口IP字符串是否合法
Jun 05 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 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
星际原理概述
2020/03/04 星际争霸
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
深入浅析Python字符编码
2015/11/12 Python
python 中random模块的常用方法总结
2017/07/08 Python
Python简单读取json文件功能示例
2017/11/30 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
解析Python的缩进规则的使用
2019/01/16 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python 爬取疫情数据的源码
2020/02/09 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
英语商务邀请函范文
2014/01/16 职场文书
土建施工员岗位职责
2014/07/16 职场文书
城南旧事电影观后感
2015/06/16 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
SQLServer中exists和except用法介绍
2021/12/04 SQL Server
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS