27

我的模板中有以下代码:

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 位。它运行时没有模板错误或任何东西,但会产生不正确的输出。我从文档中的理解,甚至是相关的堆栈溢出问题,是我的格式应该可以工作。我错过了什么或做错了什么?

4

5 回答 5

42

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

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

注意:round返回 afloat所以如果你真的想要int你也必须通过该过滤器传递值。

{{ (deet.value/100)|round|int }}
于 2013-09-26T20:38:09.397 回答
35

没有意识到过滤运算符优先于乘法!

跟进伯尼的评论,我换了

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

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

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

于 2013-07-30T21:24:31.470 回答
5

试试这个

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

如果我们不加括号,round 只会对 100 做不到结果。

于 2018-03-14T08:34:23.657 回答
3

我遇到了这个......在神社中需要 int(mem_total / 4) 。我通过进行两次操作来解决它:

{% set LS_HEAP_SIZE = grains['mem_total'] / 4 %}
{% set LS_HEAP_SIZE = LS_HEAP_SIZE | round | int %}
于 2016-02-02T16:01:59.443 回答
2

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

于 2019-06-18T11:32:12.343 回答