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'来自'horizontalGridLines'列表;分别在下面的图像 link 中突出显示的组:
为什么会出现这种情况,是否可以在不使用 '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
...但是请放心,即使表示形式不同,实际存储的值保持不变。无论您如何显示数字,与 >= 和 <= 的比较应该表现一致。
我有一个重复的值列表。当列表中的第 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'来自'horizontalGridLines'列表;分别在下面的图像 link 中突出显示的组:
为什么会出现这种情况,是否可以在不使用 '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
...但是请放心,即使表示形式不同,实际存储的值保持不变。无论您如何显示数字,与 >= 和 <= 的比较应该表现一致。