Python Jinja2圆形过滤器未舍入

Python Jinja2圆形过滤器未舍入,python,flask,jinja2,template-engine,Python,Flask,Jinja2,Template Engine,我的模板中有以下代码: 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,

我的模板中有以下代码:

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位。它运行时没有模板错误或任何东西,但产生不正确的输出。我的理解甚至是,我的格式应该有效。我遗漏了什么或做错了什么?

没有意识到过滤运算符的优先级高于乘法

在伯尼的评论之后,我换了一个话题

{{ deet.value*100|round(1) }}


解决了问题。我同意处理应该在其他地方的代码中进行,这将是更好的实践

您可以将parens放在要舍入的值周围。(这也适用于部门,与@sobri所写的相反。)

注意:
round
返回一个
float
,因此如果您确实需要
int
值,您也必须将该值通过该过滤器

{{ (deet.value/100)|round|int }}

我遇到了这个。。。jinja中所需的整数(mem_total/4)。我通过两次操作解决了这个问题:

{% set LS_HEAP_SIZE = grains['mem_total'] / 4 %}
{% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}
试试这个

{{ (deet.value*100)|round(1) }}

如果我们没有放括号,取整只会对100起作用,而不会对结果起作用。

如果筛选运算符具有优先级,那么您应该在“{100*deet.value | round(1)}”中使用取整(3)而不是取整(1)

看起来您的代码是取整
100
而不是
deet.value*100
的乘积。您可能更喜欢在代码中执行乘法,而不是在模板中。明白了,我接受您的观点,但我切换到100*deet.value | round(3),这为我解决了这个问题。谢谢这显然不适用于部门。在这种情况下,Jinja无法对结果进行四舍五入。我不同意数学应该在控制器而不是视图中完成的观点。那是一种伪装成好气味的坏气味。
{% set LS_HEAP_SIZE = grains['mem_total'] / 4 %}
{% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}
{{ (deet.value*100)|round(1) }}