Python中如何解决数字相加时遇到的精度问题?

>>> 99.95+0.01+0.03+0.01
Out: 100.00000000000001

add

有清楚原因的吗?来聊下


Python中如何解决数字相加时遇到的精度问题?
5 回复

用decimal模块。浮点数用二进制存,像0.1这种数存进去就有误差,加多了误差就明显。要精确计算,特别是钱相关的,就别用float。

from decimal import Decimal, getcontext

# 设置精度,比如28位
getcontext().prec = 28

# 用字符串初始化Decimal,别直接用浮点数
a = Decimal('0.1')
b = Decimal('0.2')
c = a + b
print(c)  # 输出 0.3

# 对比一下浮点数的坑
print(0.1 + 0.2)  # 输出 0.30000000000000004

简单说就是,要精确就别用float,用Decimal。

浮点数的运算,涉及到底层,每个语言都有个问题吧。

![不损失精度的运算]( )

你看,不损失精度的运算,也是很容易构造出来的。关键是你要明白,浮点数到底是什么……

回到顶部