Круглый фильтр Jinja2 не округляется
У меня есть следующий код в моем шаблоне:
data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}]
Я ожидаю, что данные округлены до 1 знака после запятой. Однако, когда я просматриваю страницу или источник, я получаю следующий вывод:
data: [ 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818 ]
Это не округляется до 1 знака после запятой. Он работает без ошибки шаблона или чего-либо еще, но выдает неправильный вывод. Мое понимание из документации и даже связанный с этим вопрос заключается в том, что мой формат должен работать. Что я пропускаю или делаю неправильно?
Ответы
Ответ 1
Не понял, что оператор фильтра имел преимущество перед умножением!
Вслед за комментарием Берни я переключил
{{ deet.value*100|round(1) }}
в
{{ 100*deet.value|round(1) }}
который решил проблему. Я согласен, что обработка должна произойти в коде в другом месте, и это будет лучше.
Ответ 2
Вы можете поставить parens вокруг значения, которое вы хотите округлить. (Это работает и для деления, вопреки тому, что написал @sobri).
{{ (deet.value/100)|round }}
ПРИМЕЧАНИЕ: round
возвращает float
поэтому, если вы действительно хотите, чтобы int
вы также передавали значение через этот фильтр.
{{ (deet.value/100)|round|int }}
Ответ 3
Я наткнулся на этот... нужен int (mem_total/4) в jinja. Я решил это, выполнив две операции:
{% set LS_HEAP_SIZE = grains['mem_total'] / 4 %}
{% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}
Ответ 4
Попробуй это
{{ (deet.value*100)|round(1) }}
Если бы мы не поставили круглые скобки, раунд будет делать только 100, а не результат.
Ответ 5
Если оператор фильтра имеет приоритет, то вы должны использовать round (3) вместо round (1) в "{{100 * deet.value | round (1)}}"