@pcdesign

Какое правильное и универсальное решение по округлением в jinja2?

В jinja2 мне надо округлить числа, типа:

1.5555 -> 1.55
1.5 -> 1.5
1.0 -> 1
1 -> 1
50 -> 50
50.00 -> 50
0.3222 -> 0.32

Нашел я тему на SO по этому поводу:
https://stackoverflow.com/questions/28458524/how-t...

Но между нами говоря писать вот такую громадную конструкцию для таких целей явно не комильфо:
import jinja2
>>> jinja2.Template('''{{ (50|float|round(2)|string).rstrip('0').rstrip('.') }}''').render()
'50'
>>> jinja2.Template('''{{ (5.58|float|round(2)|string).rstrip('0').rstrip('.') }}''').render()
'5.58'


Там еще предлагается вариант вынести в функцию. И на питоне уже решать эту проблему. Но что-то сама реализация вызывает вопросы.

Может есть вариант все это реализовать красивее?
  • Вопрос задан
  • 836 просмотров
Решения вопроса 1
gscraft
@gscraft
Программист, философ
Хех, просто добавьте свой фильтр: https://jinja.palletsprojects.com/en/2.11.x/api/#c... , это здоровая практика.

def smart_round(text: str, ndigits: int = 2) -> str:
    try:
        number = round(float(text), ndigits)
        if number == int(number):
            number = int(number)
        return str(number)
    except: # строка не является float / int
        return ''
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы