插入列表时更改数字

时间:2014-03-15 21:26:45

标签: python list floating-point python-2.x

我只会粘贴部分代码,因为它很长,但我想知道是否有人可能知道这个问题的潜在原因。所以我在这里有这个代码:

print "part a", working_weight
cells[working_cell_position][4] = working_weight
print "part b", working_weight, cells[working_cell_position][4], cells[working_cell_position]

它打印的内容是:

part a 62.4
part b 62.4 62.4 [6, 6, '', '', 62.400000000000006]

因此,如果你没有得到它,基本上我的变量working_weight62.4,但当我将其插入列表时,它会将其更改为{{1}但是,如果我只打印列表中的那个号码,它仍会打印为62.400000000000006。如果有人可以提供帮助,或建议解决方案来解决这个问题,我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是因为float在几乎所有语言中都是不精确的,因为它们无法在最低级别的64位二进制文​​件中轻松表示。您的代码发生的事情与它如何被放入list或类似内容无关。

如果您想保留精确的小数,则应使用decimal.Decimal

>>> from decimal import Decimal
>>> working_weight = Decimal(str(working_weight))
>>> working_weight
Decimal('62.4')

然后,Decimal可以像float一样对其执行操作。

答案 1 :(得分:0)

浮点数学很难,这就是问题所在。如果您有小数,请使用decimal.Decimal

from decimal import Decimal

a = Decimal("30")
b = Decimal("32.4")
print(a+b)
# Decimal ('62.4')

答案 2 :(得分:0)

如果没有可重现的问题,很难肯定地说,但是一种获得类似方法的方法就是例如

import numpy
a = numpy.array([62.4], numpy.float)
print a[0]      # outputs 62.4
print [a[0]]    # outputs [62.399999999999999]

working_height来自哪里?什么是working_height.__class__