Подтвердить что ты не робот

Круглый фильтр 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 знака после запятой. Он работает без ошибки шаблона или чего-либо еще, но выдает неправильный вывод. Мое понимание из документации и даже связанный с этим вопрос заключается в том, что мой формат должен работать. Что я пропускаю или делаю неправильно?

4b9b3361

Ответ 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)}}"