如何在 python 中截断不精确的浮点数

How to truncate floating points imprecision in python

我正在编写一个程序,在该程序中比较和排列日期系列中的值很重要。但是,我 运行 遇到了浮点数不精确的问题

我正在从我的 SQL 服务器中提取这些数据,它们都应该是 1.6。然而,事实证明它们略有不同(见下文)。因此,当我使用 dataframe.rank() 时,它不会将这两个日期视为同一等级,而是将 01/02/2004 排在 02/01/2005 之上。

任何人都知道如何处理这个问题,以便这两个人最终排名相同?

modelInputData.loc['01/02/2004',('Level','inflationCore','EUR')]
Out[126]: 1.6000000000000003

modelInputData.loc['02/01/2005',('Level','inflationCore','EUR')]
Out[127]: 1.6000000000000001

您可以在带有浮点数的列上使用 pd.Series.round()。

precision = 2
df['col'] = df['col'].round(decimals = precision)

参见:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.round.html

我建议你像银行家那样做 - 使用分和整数而不是 EUR/USD 和 float/decimal 变量

要么在 MySQL 端将其转换为美分,要么在 pandas:

端进行转换
df['amount'] = round(df['amount']*100)

到时候你的问题会少很多