Как мне обрезать числа до десятичных знаков в шаблонах гепардов?
В настоящее время я использую шаблоны Cheetah с моим кодом Python и передаю несколько чисел с плавающей запятой. Я хотел бы обрезать эти числа с плавающей запятой только до двух десятичных знаков в шаблоне, например, 0,2153406 станет 0,21
Можно ли сделать это в шаблоне Cheetah или я должен передать уже усеченные строки?
2 ответа
Я только что нашел решение с помощью вывода из сложных выражений, используя #echo:
#echo '%.2f' % $my_float_var#
Это распечатывает мой float в переменной $my_float_var только с двумя десятичными разрядами.
Для запуска примеров используйте print("FORMAT".format(NUMBER)); Таким образом, чтобы получить выходные данные первого примера, вы должны выполнить: print("{:.2f}". Format(3.1415926));
Будет выходной
3.14 2 decimal places
#echo
работает, но вместо этого вы можете определить свой собственный класс фильтра, чтобы контролировать детали форматирования, позволяя писать более простые шаблоны. Вот фильтр, который округляет числа с плавающей запятой до определенной точности.
import Cheetah.Filters
class MyFilter(Cheetah.Filters.Filter):
"""
Overrides filtering to control the number of digits output for
floats.
"""
def filter(self,val,numDigits=2,**kw):
"""
Called each time a top level placeholder is to be
formatted for output.
"""
if isinstance(val,float):
return f"{val:.{numDigits}f}"
return super().filter(val,**kw)
Чтобы использовать этот настраиваемый фильтр, укажите его при создании шаблона. Вот один способ.
cls=Cheetah.Template.Template.compile(tmpl)
print(cls(filter=MyFilter))
Вы также можете добавить настраиваемые аргументы в свою функцию фильтра, например numDigits
в приведенном выше примере. Чтобы указать это значение, вы должны использовать полную форму в заполнителях.
#import math
π to two digits is $math.pi
π to ten digits is ${math.pi,numDigits=10}
Это старый вопрос, но в более ранних ответах не упоминаются фильтры, хотя их основной целью является форматирование заполнителей.
Джим