在 Python 中比较浮点数时,由于浮点数的精度限制,直接使用 ==
来判断两个浮点数是否相等通常是不可靠的。可以通过设置比较精度(容许误差)来判断两个浮点数是否在特定范围内相等。常用的方法如下:
1. 使用内置的 math.isclose()
函数
Python 3.5 引入了 math.isclose()
函数,用于比较两个浮点数是否接近相等。此函数允许设置相对误差和绝对误差,以控制比较精度。
import math
a = 0.1 + 0.2
b = 0.3
# 使用默认精度(相对误差 1e-09)
print(math.isclose(a, b)) # 输出: True
# 设置更高的精度
print(math.isclose(a, b, rel_tol=1e-10, abs_tol=1e-10))
rel_tol
:相对误差容忍度,默认为1e-09
。abs_tol
:绝对误差容忍度,默认值为0.0
。适合比较非常小的数时使用。
2. 使用自定义误差范围
如果需要手动设置精度,也可以通过自定义误差范围进行比较。
def is_close(a, b, tol=1e-9):
return abs(a - b) < tol
a = 0.1 + 0.2
b = 0.3
print(is_close(a, b)) # 输出: True
3. 使用 decimal
模块
对于高精度计算,decimal
模块可以更精确地控制小数位数。将浮点数转换为 Decimal
对象后,可以设定精度进行比较。
from decimal import Decimal, getcontext
# 设置精度
getcontext().prec = 10
a = Decimal('0.1') + Decimal('0.2')
b = Decimal('0.3')
print(a == b) # 输出: True
4. 使用 numpy.isclose()
(适合科学计算)
numpy.isclose()
是 NumPy 提供的类似 math.isclose()
的函数,适用于比较数组中的浮点数。
import numpy as np
a = 0.1 + 0.2
b = 0.3
print(np.isclose(a, b)) # 输出: True
发表回复