x = [5.6, 5.6, 4.2, 4.2, 4.2]
print(sum(x) == 23.8) # False
print(sum(x)) # 23.799999999999997
解决方法一:条件判断时允许极小误差
print(sum(x) == 23.8) # False
print(abs(23.8 - sum(x)) < 1e-6) # True
解决方法二:使用decimal库
注意需要先将浮点数转成字符串再传入decimal.Decimal类,直接传入浮点数的话本身就已经带有误差了
from decimal import Decimal
x = [str(i) for i in x]
sums = 0
for t in x:
sums += Decimal(t)
print(type(sums)) # <class 'decimal.Decimal'>
print(sums == Decimal('23.8')) # True
print(sums == Decimal(23.8)) # False
print(sums == 23.8) # False