Python 3.x panda将0.6读取为0.59999999998-小数位错误

Python 3.x panda将0.6读取为0.59999999998-小数位错误,python-3.x,pandas,Python 3.x,Pandas,通过panda,下表中的值以不存在的小数位读取,例如:0.6被读取为0.59999999998(见下面的代码) 我本以为0.6等于0.6 为什么会这样解释?我需要编写什么代码才能获得预期的行为 ldcSc = pd.read_csv(os.path.join(basepath, 'kmod_table.csv'), skiprows=2) ldcSc LDC 1 2 3 0 permanent 0.6 0.6

通过panda,下表中的值以不存在的小数位读取,例如:0.6被读取为0.59999999998(见下面的代码)

我本以为0.6等于0.6

为什么会这样解释?我需要编写什么代码才能获得预期的行为

ldcSc = pd.read_csv(os.path.join(basepath, 'kmod_table.csv'), skiprows=2)
ldcSc

    LDC             1        2        3
0   permanent      0.6      0.6     0.50
1   long-term      0.7      0.7     0.55
2   medium-term    0.8      0.8     0.65
3   short-term     0.9      0.9     0.70
4   instantaneous  1.1      1.1     0.90

print(ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'permanent'].index[0]), '2'))
print(ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'short-term'].index[0]), '1'))
print(ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'medium-term'].index[0]), '3'))
打印到: 0.6 0.9 0.65

但是:

0.59999999998

ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'short-term'].index[0]), '1')
9000000000000002

ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'medium-term'].index[0]), '3')
0.650000000002

有关详细信息,请参阅和。简短的版本:计算机没有足够的空间来实现真正的无限精度,所以十进制数字的表示方式在速度和精度上有折衷

ldcSc.get_value((ldcSc.LDC[ldcSc.LDC == 'medium-term'].index[0]), '3')

对于Python中的任意精度小数,您需要该软件包。

您能用小数精确表示1/3吗?这与0.1在二进制中的问题完全相同。感谢您的评论。感谢您提供的信息和链接。