在for循环中失去浮动精度

时间:2015-06-18 23:42:59

标签: python python-2.7 floating-point

我有一个从sqlite3 db中获取的浮点数列表。从中我想找到大于数字的前两个数字,在这种情况下说是18,并列举它们在数据库中的位置。

db list:

pr = [(20.49999999999983,), (16.29999999999967,), (13.799999999999102,), (18.600000000000705,), (9.600000000000364,), (11.599999999999966,), (25.30000000000001,)...]

因此我尝试以下方法:

fnd =([i[0] for i in pr if i[0] > 18])
>>> [20.49999999999983, 18.600000000000705, 25.30000000000001]

for j in fnd:
    print ([i for i,k in enumerate(pr) if k == j])

我得到3个空列表。我假设我的问题来自于当我使用for循环时float被舍入的事实。

for j in fnd:
    print j

>>>20.5, 18.6, 25.3

有人可以提供解决方法吗?

1 个答案:

答案 0 :(得分:0)

k获取pr元素的值,这些元素是包含数字的 1-tuples

j获取fnd元素的值,您构建为数字的列表大于18。

kj进行比较时,您会将元组与数字进行比较。他们永远不平等。