我只会粘贴部分代码,因为它很长,但我想知道是否有人可能知道这个问题的潜在原因。所以我在这里有这个代码:
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_weight
是62.4
,但当我将其插入列表时,它会将其更改为{{1}但是,如果我只打印列表中的那个号码,它仍会打印为62.400000000000006
。如果有人可以提供帮助,或建议解决方案来解决这个问题,我们将不胜感激。
答案 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__
?