在1和0之间的循环内增加.1为什么变量val在1时没有反转?

时间:2014-04-16 21:58:55

标签: python python-2.7 while-loop floating-point

tweeninc=0.0
tranVal=0.0
increment=1
tweenVal=0.0
increment1=0.1
while True:



    if tweenVal==1.0:
        increment1=-0.1
    if tweenVal==0.0:
        increment1=0.1
    if tranVal==14:
        increment=-1
    if tranVal==-14:
        increment=1
    tranVal=tranVal+increment
    tweenVal=tweenVal+increment1

    print tweenVal

在while循环中为什么tweenVal会超过1。

它是.8,.9,1.0,1.1,1.2,1.3 ...... 1.9 ......我想要它去.8,.9,1.0,.9,.8,.7 ...... 0,0.1,0.2

我为它下面的值做了同样的事情,介于-14和14之间它是否与浮点有关?

1 个答案:

答案 0 :(得分:2)

浮点编码不精确,不能代表所有可能的值。在converted to double precision ieee754 format时,您认为0.1实际上是0.10000000149011612。底线 - 不要对浮点值进行精确比较。

这样的事情会更好:

if tweenVal > 0.95:
    increment1=-0.1
if tweenVal < 0.05:
    increment1=0.1