Как применить точность с плавающей точкой (спецификатор типа) в условной 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}")
Другие вопросы по тегам