2014-12-04 2 views
0

Так что у меня это:Python - Float не совпадает с одним и тем же поплавком?

import random 

rand=random.random() 
print rand 

inp = raw_input("Enter your guess: ") 
print float(inp) 

try: 
    if float(inp)==rand: 
    print "equal" 
    else: 
    print "not equal" 
except: 
    print "error" 

Однако он говорит, что не равны. Я знаю, что это связано с неточностями с плавающей запятой, но как я могу в качестве пользователя ввести то, что получается равным?

+0

возможного дубликат [Что это лучший способ для сравнения поплавков для почти равенства в Python?] (Http://stackoverflow.com/questions/5595425/what-is-the-best-way-to-compare-floats-for-почти-equal-in-python) – soon

ответ

4

Поскольку вы используете print на своем поплавке, он отображается в «более привлекательном» формате, который пропускает некоторые десятичные знаки. Вы можете сделать print repr(rand) показать все цифры:

>>> rand = random.random() 
>>> print rand 
0.004312203809 
>>> print repr(rand) 
0.004312203809001436 

Если вы используете последнюю форму, а затем ввести все эти цифры, вы можете заставить его признать поплавки как равные.

+0

На Python 3 print (repr (rand)) и print (rand) дают мне точный результат , – Scooter

+0

AFAIK по крайней мере в Python3 'float .__ str__' пытается получить более приятный вывод, однако этот вывод определяется как самый короткий литерал *, который представляет заданное значение *. Поэтому не нужно было бы вводить другие десятичные знаки. – Bakuriu

+0

Вопрос явно использует Python 2 (потому что он использует 'print rand', а не' print (rand) '). Если вы конвертируете свою программу как есть в Python 3 (т. Е. Просто измените 'print' и' raw_input'), то она уже работает. – BrenBarn

0

Даже вы можете использовать магнезии свойство

import random 

rand=random.random() 
print rand.__repr__() 

inp = raw_input("Enter your guess: ") 

print float(inp).__repr__() 

try: 
    if float(inp)==rand: 
     print "equal" 
    else: 
     print "not equal" 
except: 
     print "error" 
Смежные вопросы