首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

特别注意,在Python中比较浮点数的正确方法

浮点数是Python最常用的数值类型之一,但它们有一系列陷阱,这些陷阱肯定会难倒许多初出茅庐的程序员。

以下是一些更令人困惑的例子:

>>> 0.1 + 0.2 == 0.3

False

>>> 0.1 + 0.2 > 0.3

True

>>> 0.2 + 0.2 + 0.2 == 0.6

False

>>> 1.3 + 2.0 == 3.3

True

第一次看到这个可能会让人迷失方向。这到底是怎么回事呢?你的电脑在骗你吗?但是这种结果是正确的!

当您在Python解释器中键入数字时,它会将十进制的小数转换为二进制形式存储在内存中。生成的二进制数可能无法准确表示原始的十进制数。

十进制浮点数以二进制写入时可能会有无限重复的小数部分。比如,将分数1/3转成十进制的小数时,也会发生同样的事情。

计算机内存是有限的,因此无限重复的二进制数将四舍五入。具体保留多少位,取决于计算机的体系结构(32位/64 位)。将二进制转换为十进制时,结果可能会不等于原始的数值。

>>> 0.1+0.2

0.30000000000000004

那么如何在Python中比较浮点数?

诀窍是避免使用比较运算符检查相等性。

可以使用math.isclose()方法。

math.isclose ()方法用于确定两个浮点数的值是否接近。

用法: isclose(a, b, rel_tol = 1e-09, abs_tol 0.0)

可以更改参数rel_tol、abs_tol最大差异,绝对公差来控制。

>>> import math

>>> math.isclose(0.1 + 0.2, 0.3)

True

还可以使用fractions模块下Fraction方法,利用分数进行运算。

>>> from fractions import Fraction

>>> Fraction(1, 10) + Fraction(2, 10) == Fraction(3, 10)

True

关于Python中的浮点数,还有很多方法进行处理。使用浮点数时一定要多加注意。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230112A0507100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券