Last decimal digit precision changes in different call of same generator function
本问题已经有最佳答案,请猛点这里访问。
我创建了这个生成器函数:
1 2 3 4 5 | def myRange(start,stop,step): r = start while r < stop: yield r r += step |
我用了两种不同的方式。第一:
1 2 | for x in myRange(0,1,0.1): print x |
结果:
1 2 3 4 5 6 7 8 9 10 11 | 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 |
第二种调用函数的方法:
1 | a = [x for x in myRange(0,1,0.1)] |
结果是:
1 | [0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999] |
为什么生成的值不同?
它不是您调用生成器的顺序,而是您呈现导致输出变化的数字的方式。
您第二次打印列表对象,这是一个容器。容器内容物是使用
浮点数的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | >>> 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' |
浮点数上的