python如何判断两个浮点数大约相等?

浮点数相等一直是个老生常谈的话题。今天我们借助python math模块中的isclose函数说明一下这个问题。

isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
    Determine whether two floating point numbers are close in value

python官方在文档中给出了如上说明,解释一下参数的含义:
(1)rel_tol :使用科学计数法表示的a, b两数允许的最大差异。例如当rel_tol=1e-02,即表示当a与b两数的差异小于0.1时,即认为是相等的,具体看下面例子。

>>> import math
>>> a = 5.0
>>> b = 4.99

# a - b < 0.1,所以返回true
>>> math.isclose(a, b, rel_tol=1e-2)
True

# |b - a| < 0.1,也是可以的
>>> math.isclose(b, a, rel_tol=1e-2)
True

# |b-a| > 0.01,结果就是false了
>>> math.isclose(b, a, rel_tol=1e-3)
False

(2)abs_tol,该参数表示绝对差,当指定了它之后,还可以实现更为精确的比较。

>>> a=4.953
>>> b=4.951
# 由于a - b >= 0.002,所以结果为false
>>> math.isclose(b, a, abs_tol=0.002)
False

# 由于a - b < 0.003,所以结果为true
>>> math.isclose(b, a, abs_tol=0.003)
True

(3)如果同时指定了上述两个参数,则只要符合一个即可

>>> a=4.953
>>> b=4.951
>>>> math.isclose(b, a,rel_tol=1e-3, abs_tol=0.002)
True

(4)除了浮点数,在整数之间的比较也是非常方便的。

>>> a=1111
>>> b=1120
# 有时在比较比较大的数的时候,
# 个位十位忽略掉都是可以的
>>> math.isclose(b, a,abs_tol=10)
True
>>> math.isclose(b, a,abs_tol=5)
False

哈哈,以上就是python小工具今天的介绍,其实还是实用性很高的一个函数,尤其在大批量数据使用pandas时,优势还是非常明显的。有兴趣的话,可以关注:python小工具。一起学习python和pandas。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值