Как применить точность с плавающей точкой (спецификатор типа) в условной f-строке?
У меня есть следующая f-строка, которую я хочу распечатать при условии, что переменная доступна:
f"Percent growth: {self.percent_growth if True else 'No data yet'}"
Что приводит к:
Percent growth : 0.19824077757643577
Поэтому обычно я бы использовал спецификатор типа для точности с плавающей точкой, например:
f'{self.percent_growth:.2f}'
Что приведет к:
0.198
Но это портит выражение if в этом случае. Либо это не удается, потому что:
f"Percent profit : {self.percent_profit:.2f if True else 'None yet'}"
Оператор if становится недоступным. Или вторым способом:
f"Percent profit : {self.percent_profit if True else 'None yet':.2f}"
F-строка терпит неудачу всякий раз, когда условие приводит к предложению else.
Итак, мой вопрос, как я могу применить точность с плавающей запятой внутри f-строки, когда f-строка может привести к двум типам?
3 ответа
Вы можете использовать другую f-строку для вашего первого условия:
f"Percent profit : {f'{self.percent_profit:.2f}' if True else 'None yet'}"
По общему признанию не идеал, но это делает работу.
Вы также можете использовать троичную строку для средства форматирования - не нужно складывать 2 f-строки, как в ответе Николаса:
for pg in (2.562345678, 0.9, None): # 0.0 is also Falsy - careful ;o)
print(f"Percent Growth: {pg if pg else 'No data yet':{'.05f' if pg else ''}}")
# you need to put '.05f' into a string for this to work and not complain
Выход:
Percent growth: 2.56235
Percent growth: 0.90000
Percent growth: No data yet
Я думаю, что f-строка в ответе f-строки настолько проста, насколько это возможно, но если вы хотите немного большей читабельности, рассмотрите возможность перемещения условия за пределы f-строки:
value = f'{self.percent_profit:.2f}' if True else 'No data yet'
print(f"Percent profit : {value}")