Это может быть немного уродливым взломом, но он работает довольно хорошо, когда вам не нужно больше, чем точность с плавающей запятой по умолчанию (около 11 десятичных знаков).Хорошо работает на python 2.7.
Функция round_to использует метод формата из встроенного класса str для округления числа с плавающей точкой дострока, которая представляет число с плавающей запятой с необходимым количеством десятичных знаков, а затем применяет встроенную функцию eval к округленной строке с плавающей запятой, чтобы вернуться к числовому типу с плавающей запятой.
The is_close функция просто применяет простое условное выражение к закругленному с плавающей точкой.
def round_to(float_num, decimal_precision):
return eval("'{:." + str(int(decimal_precision)) + "f}'.format(" + str(float_num) + ")")
def is_close(float_a, float_b, decimal_precision):
if round_to(float_a, decimal_precision) == round_to(float_b, decimal_precision):
return True
return False
a = 10.0 / 3
# Result: 3.3333333333333335
b = 10.0001 / 3
# Result: 3.3333666666666666
print is_close(a, b, decimal_precision=4)
# Result: False
print is_close(a, b, decimal_precision=3)
# Result: True