Mit*_*ops 18 python template-engine jinja2 flask
我的模板中有以下代码:
data: [{% for deet in deets %} {{ deet.value*100|round(1) }}{% if not loop.last %},{% endif %} {% endfor %}]
Run Code Online (Sandbox Code Playgroud)
我期待数据四舍五入到小数点后1位.但是,当我查看页面或源时,这是我得到的输出:
data: [ 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818, 44.2765833818 ]
Run Code Online (Sandbox Code Playgroud)
这不会四舍五入到小数点后1位.它运行没有模板错误或任何东西,但产生不正确的输出.我对文档的理解,甚至是相关的堆栈溢出问题,都是我的格式应该有效.我错过了什么或做错了什么?
小智 29
您可以将parens放在要舍入的值周围.(这也适用于分裂,与@sobri写的相反.)
{{ (deet.value/100)|round }}
Run Code Online (Sandbox Code Playgroud)
注意:如果你真的想要你必须通过该过滤器传递值,则round返回一个.floatint
{{ (deet.value/100)|round|int }}
Run Code Online (Sandbox Code Playgroud)
Mit*_*ops 22
没有意识到过滤器操作符优先于乘法!
继bernie的评论后,我换了
{{ deet.value*100|round(1) }}
Run Code Online (Sandbox Code Playgroud)
至
{{ 100*deet.value|round(1) }}
Run Code Online (Sandbox Code Playgroud)
这解决了问题.我同意处理应该在其他地方的代码中进行,这将是更好的做法.
尝试这个
{{ (deet.value*100)|round(1) }}
Run Code Online (Sandbox Code Playgroud)
如果我们不加括号,round 只会对 100 进行处理,而不会对结果进行处理。