为什么append()会附加不正确的数据?

时间:2013-09-07 14:19:39

标签: python append

我不是在寻找修复我的代码,我想了解什么机制导致我的列表定期填充不正确的数据。

x = []
h = 0.01

for i in range(101):
    x.append(1+i*h)

print x

"""
~$ python ~/dev/python/inf1100/coor1.py 
[1.0, 1.01, 1.02, 1.03, 1.04, 1.05, 1.06, 1.07, 1.08, 1.09, 1.1, 1.11, 1.12, 1.13, 1.1400000000000001, 1.15, 1.16, 1.17, 1.18, 1.19, 1.2, 1.21, 1.22, 1.23, 1.24, 1.25, 1.26, 1.27, 1.28, 1.29, 1.3, 1.31, 1.32, 1.33, 1.34, 1.35, 1.3599999999999999, 1.37, 1.38, 1.3900000000000001, 1.4, 1.4100000000000001, 1.42, 1.43, 1.44, 1.45, 1.46, 1.47, 1.48, 1.49, 1.5, 1.51, 1.52, 1.53, 1.54, 1.55, 1.56, 1.57, 1.58, 1.5899999999999999, 1.6, 1.6099999999999999, 1.62, 1.63, 1.6400000000000001, 1.65, 1.6600000000000001, 1.67, 1.6800000000000002, 1.69, 1.7000000000000002, 1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.8, 1.81, 1.82, 1.83, 1.8399999999999999, 1.85, 1.8599999999999999, 1.87, 1.88, 1.8900000000000001, 1.9, 1.9100000000000001, 1.92, 1.9300000000000002, 1.94, 1.9500000000000002, 1.96, 1.97, 1.98, 1.99, 2.0]
"""

当检查打印的数字列表时,观察者注意到预期出现在列表中的数字1.14不存在,而是找到了浮点数1.1400000000000001。

这在整个列表中多次发生。

是什么导致这种情况发生?

1 个答案:

答案 0 :(得分:5)

这与浮点数表示有关。有一个最大精度或可用于表示数字的位数,因此有些东西无法准确显示。正确的数字被放入。

使用标准python float,数字1.1400000000000001是最接近的1.14表示。