Как часть некоторого кода модульного тестирования, который я пишу, я написал следующую функцию. Цель этого - определить, можно ли округлить «a» до «b», независимо от того, насколько точны «a» или «b».
def couldRoundTo(a,b):
"""Can you round a to some number of digits, such that it equals b?"""
roundEnd = len(str(b))
if a == b:
return True
for x in range(0,roundEnd):
if round(a,x) == b:
return True
return False
Вот некоторые выходные данные функции:
>>> couldRoundTo(3.934567892987, 3.9)
True
>>> couldRoundTo(3.934567892987, 3.3)
False
>>> couldRoundTo(3.934567892987, 3.93)
True
>>> couldRoundTo(3.934567892987, 3.94)
False
Насколько я могу сказать, это работает. Тем не менее, я боюсь полагаться на это, учитывая, что у меня нет полного понимания вопросов, касающихся точности с плавающей точкой. Может кто-нибудь сказать мне, если это подходящий способ для реализации этой функции? Если нет, как я могу улучшить это?