python中浮点数比较判断!为什么不能用==(推荐)

 更新时间:2023年09月26日 09:26:59   作者:何双新  
这篇文章主要介绍了python中浮点数比较判断!为什么不能用==,本文给大家分享问题解决方法,需要的朋友可以参考下

问题:浮点数比较为什么不能用==来写?

答:计算机里面的数字是由二进制保存的,在计算机内部有些数字不能准确的保存,于是就保存了一个最靠近的数字。

计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮点数,计算机会把它们的精度之外的小数部分截断。

因此比较两个float是否相等,不能仅仅依靠==来判断,而是当他们的两者的差值小于一个我们可以容忍的小值时,就可以认为它们相等。

解决办法:

1、在python3.5之前,可以通过计算两个浮点数之差来判断两个浮点数是否相等:

  例子1: abs(f1 - f2) <= allowed_error   可接受的误差

或:

def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
    return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

2、python 3.5之后,PEP485提案中给出了解决方案。math模块新增一个isclose函数用来判断两个浮点数的值是否接近或相等   例子2:

  • 源码:
 isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
  • 参数:
  • a,b:两个需要比较的浮点数;
  • rel_tol: 相对于输入值的大小,被认为是“接近”的最大差异;
  • abs_tol: 无论输入值的大小,被认为“接近”的最大差异
  • 本质算法
<strong><code>    abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)</code></strong>
import math
print(math.isclose(2.1,2.2,rel_tol=0.1))
# 结果:True
# 同理abs_tol也可以自定义

到此这篇关于python中浮点数比较判断!为什么不能用==的文章就介绍到这了,更多相关python浮点数比较内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中nuitka使用程序打包的实现

    python中nuitka使用程序打包的实现

    本文主要介绍了python中nuitka使用程序打包的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 如何在Django配置文件里配置session链接

    如何在Django配置文件里配置session链接

    这篇文章主要介绍了如何在Django配置文件里配置session链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python+selenium破解拼图验证码的脚本

    Python+selenium破解拼图验证码的脚本

    很多网站在登录或者注册时都会遇到拼图验证码,这种拼图验证码实际上是多个小碎片经过重新组合成的一张整体。本文将和大家分享一个基于Python selenium的破解拼图验证码的脚本,需要的可以参考一下
    2022-02-02
  • python正则分组的应用

    python正则分组的应用

    组是通过 "(" 和 ")" 元字符来标识的。 "(" 和 ")" 有很多在数学表达式中相同的意思;它们一起把在它们里面的表达式组成一组
    2013-11-11
  • Python软件包安装的三种常见方法

    Python软件包安装的三种常见方法

    python拥有非常丰富的扩展包,下面这篇文章主要给大家介绍了关于Python软件包安装的三种常见方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python爬取门户论坛评论浅谈Python未来发展方向

    Python爬取门户论坛评论浅谈Python未来发展方向

    这篇文章主要介绍了如何实现Python爬取门户论坛评论,附含图片示例代码,讲解了详细的操作过程,有需要的的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • Python可变和不可变、类的私有属性实例分析

    Python可变和不可变、类的私有属性实例分析

    这篇文章主要介绍了Python可变和不可变、类的私有属性,结合实例形式分析了Python值可变与不可变的情况及内存地址变化,类的私有属性定义、访问相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • python add_argument()用法解析

    python add_argument()用法解析

    这篇文章主要介绍了python add_argument()用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python排序方法中sort和sorted的区别详解

    Python排序方法中sort和sorted的区别详解

    在python中常用的排序函数就是sort()和sorted()这两个函数,使用 sort() 或内建函数 sorted() 对列表进行排序,本文将详细介绍sorted和sort两者之间的区别,感兴趣的可以了解一下
    2023-08-08
  • Python实现Opencv cv2.Canny()边缘检测

    Python实现Opencv cv2.Canny()边缘检测

    这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论