浅谈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中的jquery PyQuery库使用小结
May 13 Python
Python运算符重载详解及实例代码
Mar 07 Python
微信跳一跳游戏python脚本
Apr 01 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
Python-接口开发入门解析
Aug 01 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
pygame实现弹球游戏
Apr 14 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
利用python查看数组中的所有元素是否相同
Jan 08 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
Extjs学习笔记之七 布局
2010/01/08 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
python实现查询苹果手机维修进度
2015/03/16 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
django迁移数据库错误问题解决
2019/07/29 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
技术总监管理岗位职责
2014/03/09 职场文书
大学专科求职信
2014/07/02 职场文书
委托书格式
2014/08/01 职场文书
授权委托书公证
2014/09/14 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
java版 联机五子棋游戏
2022/05/04 Java/Android
Django框架中表单的用法
2022/06/10 Python