Python 遍历列表时的精度?

Python precision when iterating through list?

我有一个重复的值列表。当列表中的第 n 个项在 iter 循环中定义了一个变量时,它并不代表原始列表项的精度;因此 - 小数位丢失。

简单地打印列表中的每个项目类型 returns 浮动,第 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'列表;分别在下面的图像 link 中突出显示的组:

Script Editor Screen-Grab

为什么会出现这种情况,是否可以在不使用 'Decimal' 模块的情况下进行补救?

感谢任何智慧。

这种明显的精度变化是因为 repr representation of a float may contain more digits than the 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

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