Alv*_*vin 3 python function generator floating-point-precision
我创建了这个生成器函数:
def myRange(start,stop,step):
r = start
while r < stop:
yield r
r += step
Run Code Online (Sandbox Code Playgroud)
我用两种不同的方式使用它.第一名:
for x in myRange(0,1,0.1):
print x
Run Code Online (Sandbox Code Playgroud)
结果:
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Run Code Online (Sandbox Code Playgroud)
第二种方式调用函数:
a = [x for x in myRange(0,1,0.1)]
Run Code Online (Sandbox Code Playgroud)
这导致:
[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
Run Code Online (Sandbox Code Playgroud)
为什么生成的值不同?
这不是您调用生成器的顺序,而是您呈现导致输出更改的数字的方式.
您正在第二次打印列表对象,这是一个容器.容器内容使用repr()
时打印,而在您直接使用print
浮动之前,使用str()
repr()
并且str()
浮点数的输出简单地不同:
>>> lst = [0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
>>> print lst
[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
>>> for elem in lst:
... print elem
...
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
>>> str(lst[3])
'0.3'
>>> repr(lst[3])
'0.30000000000000004'
Run Code Online (Sandbox Code Playgroud)
repr()
在float上产生一个结果,让你可以准确地重现相同的值.str()
舍入浮点数进行演示.
归档时间: |
|
查看次数: |
120 次 |
最近记录: |