python 浮点数无法精确表示

如何解释下面的执行结果为False?( )

1

print(1.2- 1.0== 0.2)

A Python的实现有错误

B 浮点数无法精确表示

C 布尔运算不能用于浮点数比较

D Python将非0数视为False

修改版本如下:

方案一:使用 math.isclose()(Python 3.5+ 推荐)

这是最简洁、最符合Python风格的方式。

python

import math

# 默认相对容差为 1e-9,绝对容差为 0.0
print(math.isclose(1.2 - 1.0, 0.2))  # True

# 也可自定义容差
print(math.isclose(1.2 - 1.0, 0.2, rel_tol=1e-9, abs_tol=1e-12))  # True

方案二:自定义容差比较

如果您需要兼容旧版本Python或想要更直观的控制,可以手动计算差值。

python

# 方法1:绝对误差比较
def float_equal_abs(a, b, epsilon=1e-10):
    return abs(a - b) < epsilon

print(float_equal_abs(1.2 - 1.0, 0.2))  # True

# 方法2:相对误差比较(更科学)
def float_equal_rel(a, b, rel_tol=1e-9):
    return abs(a - b) <= max(abs(a), abs(b)) * rel_tol

print(float_equal_rel(1.2 - 1.0, 0.2))  # True

方案三:使用 decimal 模块进行精确计算

如果涉及金融等需要精确计算的场景,可以使用 decimal 模块。

python

from decimal import Decimal

# 使用字符串初始化Decimal以避免浮点误差
result = Decimal('1.2') - Decimal('1.0')
print(result == Decimal('0.2'))  # True

# 注意:不要用浮点数初始化Decimal
result2 = Decimal(1.2) - Decimal(1.0)
print(result2 == Decimal(0.2))  # False!因为1.2本身已有误差

方案四:使用 numpy(科学计算常用)

如果您已经在使用NumPy进行数值计算,可以使用其提供的函数。

python

import numpy as np

# numpy的isclose函数
print(np.isclose(1.2 - 1.0, 0.2))  # True

# allclose用于数组比较
arr1 = np.array([1.2 - 1.0, 2.0 - 1.5])
arr2 = np.array([0.2, 0.5])
print(np.allclose(arr1, arr2))  # True
全部评论

相关推荐

03-06 20:09
贵州大学 Java
King987:你这个学历找个中大厂刷实习经历都是可以的,但是项目要有亮点才行,这个什么外卖就不要做了,去找找最新的项目,至少涉及高并发或者是新型的AI技术mcp rag啥的 ,我在出简历点评,但是你这个没什么好点评的,内容太少,而且含金量太低。自己改一改吧,或者看一下我的项目地址中,那里有大厂最近做过的实习项目
点赞 评论 收藏
分享
01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务