2014-05-02 3 views
3

Вот основная проблема:Мой '==' оператор не работает

test = 24.02000 - 24 
print "test: %f" % test 
if (test == 0.02): 
    print "OK" 

Выход:

test: 0.20000 

"OK" должны были распечатаны, а также.

Однако, если я это сделать:

test = 0.02 
print "test: %f" % test 
if (test == 0.02): 
    print "OK" 

я получаю:

test: 0.020000 
OK 

Я пропускаю что-то здесь, или это действительно ошибка?

+6

Настоятельно рекомендуем прочитать эту https://docs.python.org/2/tutorial/floatingpoint.html –

+0

>>> 24,02000 - 24 0,019999999999999574 –

ответ

4

Это связано с плавающей точкой неточностей, поскольку компьютеры сделки в базе-2 в то время как мы имеем дело в базовой 10:

>>> 24.02000 - 24 
0.019999999999999574 

Чтобы преодолеть эту проблему, вы можете использовать round:

test = 24.02000 - 24 
print "test: %f" % test 
if (round(test, 2) == 0.02): #round the float to a certain degree of precision and then do the comparison 
    print "OK" 

[OUTPUT] 
test: 0.020000 
OK 

Если вы хотите сравнить с более высокой точностью, вы можете изменить второй параметр round:

(round(test, 5) == 0.2) 
+0

Благодаря sshashank124 работал как шарм! – RyanD

+0

Готово :) Спасибо! – RyanD

Смежные вопросы