Я бы порекомендовал запустить round
, чтобы выяснить, будет ли форматирование строки округлять соотношение до 0 или 1. Эта функция также имеет возможность выбрать, сколько десятичных знаков округлять до:
def get_rounded(value, decimal=1):
percent = value*100
almost_one = (round(percent, decimal) == 100) and percent < 100
almost_zero = (round(percent, decimal) == 0) and percent > 0
if almost_one:
return "< 100.0%"
elif almost_zero:
return "> 0.0%"
else:
return "{:2.{decimal}f}%".format(percent, decimal=decimal)
for val in [0, 0.0001, 0.001, 0.5, 0.999, 0.9999, 1]:
print(get_rounded(val, 1))
Какие выходы:
0.0%
> 0.0%
0.1%
50.0%
99.9%
< 100.0%
100.0%
Я не верю, что есть более короткий способ сделать это. Я также не рекомендовал бы использовать math.isclose
, так как вам пришлось бы использовать abs_tol
, и он был бы не так удобочитаем.