Python 给出错误和的系列

Python 给出错误和的系列,python,pandas,series,numpy-ndarray,Python,Pandas,Series,Numpy Ndarray,为什么这个熊猫系列给出了sum=.9999999,答案是1。在我的程序中,我需要断言“和等于1”。而且,即使条件正确,断言也会失败 s = pd.Series([0.41,0.25,0.25,0.09]) print("Pandas version = " + pd.__version__) print(s) print(type(s)) print(type(s.values)) print(s.values.sum()) 输出为: Pandas version = 0.23.4 0

为什么这个熊猫系列给出了sum=.9999999,答案是1。在我的程序中,我需要断言“和等于1”。而且,即使条件正确,断言也会失败

s = pd.Series([0.41,0.25,0.25,0.09])
print("Pandas version = " + pd.__version__)
print(s)
print(type(s))
print(type(s.values))
print(s.values.sum())
输出为:

Pandas version = 0.23.4
0    0.41
1    0.25
2    0.25
3    0.09
dtype: float64
<class 'pandas.core.series.Series'>
<class 'numpy.ndarray'>
0.9999999999999999
熊猫版本=0.23.4 0 0.41 1 0.25 2 0.25 3 0.09 数据类型:64 0.9999999999999999
用于确定两个值是否任意接近。这是浮点数在机器中存储方式的残余,用于确定两个值是否任意接近。这是浮点数在机器中存储方式的遗留问题

进一步扩展,大多数内置浮点数类型并不完全精确。它们不能始终准确地表示计算结果。这意味着您永远不应该在不使用epsilon值(可接受的误差范围)的情况下进行比较,就像np.isclose一样。如果您必须有精确相加的结果,那么您应该使用类似的方法。非常感谢Ian Quah和@Wieschie的输入。为了扩展这一点,大多数内置浮点类型并不完全精确。它们不能始终准确地表示计算结果。这意味着您永远不应该在不使用epsilon值(可接受的误差范围)的情况下进行比较,就像np.isclose一样。如果你必须得到准确的结果,你应该使用类似的东西。非常感谢Ian Quah和@Wieschie的输入。