【发布时间】:2017-06-09 10:27:08
【问题描述】:
我知道 Python 在使用普通类型时会出现浮点错误。这就是我改用 Pandas 的原因。
我突然开始对我输入的数据(不是计算)有一些问题,并且无法解释以下行为:
In [600]: df = pd.DataFrame([[0.05], [0.05], [0.05], [0.05]], columns = ['a'])
In [601]: df.dtypes
Out[601]:
a float64
dtype: object
In [602]: df['a'].sum()
Out[602]: 0.20000000000000001
In [603]: df['a'].round(2).sum()
Out[603]: 0.20000000000000001
In [604]: (df['a'] * 1000000).round(0).sum()
Out[604]: 200000.0
In [605]: (df['a'] * 1000000).round(0).sum() / 1000000
Out[605]: 0.20000000000000001
希望有人可以帮助我解决这个问题或弄清楚如何正确地求和 0.2(或者我不介意结果是 20 还是 2000,但正如你所看到的,当我除以时,我得到了相同的点总和不正确!)。
(运行我的代码记得做import pandas as pd)
【问题讨论】:
-
这就是浮点数的本质。这只是一个表示,所以你可以忽略它。为什么这对你来说是个问题?顺便说一句:
print(0.1 + 0.2) -
@MaxU 我明白了。这就是为什么我会尝试通过执行 0.05 * 100 = 5 来解决,将这 4 相加并得到 20。但我的问题是系统看到 20.00000..001,甚至四舍五入似乎也不起作用。
标签: python pandas floating-point precision