为什么Python计算精确十进制数时会输出近似值?
运算结果偏差原因
这个现象是二进制浮点数存储精度的固有局限性导致的,和你写的函数逻辑没有关系:
- 计算机底层使用二进制存储浮点数,绝大多数十进制小数都无法被精确表示,类似十进制无法精确表示分数1/3的情况。你传入的参数
1/5对应的十进制0.2转换为二进制是无限循环小数,Python默认的float类型为双精度64位浮点数,存储时只能保留固定位数的有效数字,从赋值开始就自带了微小的精度误差。 - 后续的平方、减法运算会逐步累加这个微小误差,最终就出现了和理论值0.32有可观测偏差的结果。
解决方法
如果需要得到精确的十进制运算结果,可以使用两种方案:
- 用Python标准库的
decimal模块做精确十进制运算:
from decimal import Decimal def G(x): x = Decimal(str(x)) return Decimal(1) - x ** 2 - (Decimal(1) - x) ** 2 print(G(1/5)) # 输出为精确的0.32
- 如果只需要结果符合日常展示精度,可以对返回结果做小数位截断:
print(round(G(1/5), 2)) # 输出0.32
内容的提问来源于stack exchange,提问作者Aziz Jedidi
相关产品推荐
相关产品推荐

