Python扩展小数

时间:2013-11-20 23:42:15

标签: python

为什么python有时会扩展数字,有没有办法阻止它?例如1.7可能变成1.70000005。 具体来说,我在接受浮动列表并尝试填充新列表时遇到此问题。

newList = []
for value in myList:
    print value
    newList.append(value)
return newList

控制台将打印出包含不超过2个小数位的数字,而返回的newList将有17个位置,并且通常在最后一位数字中包含非零值。即使我试图在循环内舍入(值,2),它也会这样做。

2 个答案:

答案 0 :(得分:1)

这只是代表!实际上,列表的内容仍然相同。

要正确显示,您可以将其格式化为字符串:

print("{.17f}".format(my_float_value))

或者,您可以使用decimals模块:

>>> import decimal
>>> my_float = decimal.Decimal("0.2342134235")
>>> my_float
Decimal('0.2342134235')

希望这有帮助!

答案 1 :(得分:1)

CPython使用C双打,而C双打通常在硬件中实现以提高速度。

硬件浮点精确到只有有限数量的数字。此外,它存储了基数2,我们主要考虑基数10,并且一些在基数10中具有有限表达式的数字在基数2中没有,反之亦然。

所以你应该:

  1. 永远不要将相等的浮点值与另一个浮点值进行比较。 相反,减去它们,取绝对值,并进行比较 导致像1e-8这样的小正数。
  2. 将浮点数值舍入到可用数量的位置 小数点后,使用字符串格式或 http://docs.python.org/3/library/functions.html#round功能。
  3. 您可以使用decimal模块获取调用者指定的精度。或者,如果您有合理的值,则可以使用分数模块。