迭代列表时的Python精度?

时间:2015-01-08 18:45:53

标签: python list floating-point decimal precision

我有一个迭代的值列表。当列表中的nTH项定义iter-loop中的变量时,它不表示原始列表项精度; ergo - 小数位丢失。

只需打印列表中的每个项目类型,就像nTH项目类型一样,返回所有项目的浮点数 - 但列表和nTH项目代表两个不同的值;一个小数点后几位。

必须避免这种情况,因为稍后在> = /< =例程中检查此值。如果缺少小数位,唯一的结果是4周龄的foo-bar馅饼。

也许一些代码和脚本屏幕抓取会有所帮助:

                        for J in range(lastRow,firstRow):
                        print 'rows', range(lastRow,firstRow)
                        theYintersect = horizontalGridLines[J]
                        print theYintersect
                        ...
                        scanningVertices = False
                        print horizontalGridLines

在哪里' theYintersect '源自' horizo​​ntalGridLines '列表;分别在下面的图片链接中突出显示的组:

Script Editor Screen-Grab

为什么会发生这种情况,并且可以在不使用“十进制”的情况下进行补救。模块?

感谢您的任何智慧。

1 个答案:

答案 0 :(得分:4)

精度的这种明显变化是因为float的repr表示可能包含比同一float的str表示更多的数字。直接打印的对象使用str,集合中的对象(如列表)使用repr。例如:

>>> repr(1/3.0)
'0.3333333333333333'
>>> str(1/3.0)
'0.333333333333'
>>> print [1/3.0]
[0.3333333333333333]
>>> print 1/3.0
0.333333333333

...但请放心,即使表示方式不同,实际存储的价值也保持不变。与> =和< =的比较应该始终如一,无论您如何显示数字。