Как мне обрезать числа до десятичных знаков в шаблонах гепардов?

В настоящее время я использую шаблоны 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}

Это старый вопрос, но в более ранних ответах не упоминаются фильтры, хотя их основной целью является форматирование заполнителей.

Джим

Другие вопросы по тегам