如何使用浮点过滤器在小数点后只显示两位数?

Bla*_*ise 48 wsgi jinja2 flask

我使用Flask/Jinja2模板使用| float过滤器显示数字.

这是我的代码

{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)
Run Code Online (Sandbox Code Playgroud)

输出有点尴尬:

17/189 (8.99470899471%)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法,使点后的地方限制为数字,例如2.

期望的输出:

17/189 (8.99%)
Run Code Online (Sandbox Code Playgroud)

Bla*_*ise 66

它变得非常简单:

我的代码:

{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)
Run Code Online (Sandbox Code Playgroud)

可以改变一点:

{% set proc_err = nb_err|length / sum * 100 %}
({{'%0.2f' % proc_err|float}}%)
Run Code Online (Sandbox Code Playgroud)

或使用格式:

({{'%0.2f'| format(proc_err|float)}}%)
Run Code Online (Sandbox Code Playgroud)

可以在jinja2 github issue 70上找到参考


Pao*_*llo 53

您可以使用round将a格式化为float给定的精度.

文档中提取:

round(value, precision=0, method='common')

将数字四舍五入到给定的精度.第一个参数指定精度(默认为0),第二个参数指定舍入方法:

  • common 向上或向下舍入
  • ceil 总是围捕
  • floor 总是向下舍入

如果未指定使用方法common.

{{ 42.55|round }}
    -> 43.0
{{ 42.55|round(1, 'floor') }}
    -> 42.5
Run Code Online (Sandbox Code Playgroud)

请注意,即使舍入到0精度,float也会返回a.如果你需要一个真正的整数,请通过它int:

{{ 42.55|round|int }}
    -> 43
Run Code Online (Sandbox Code Playgroud)

  • 除了“round(2)”永远不会返回“42.00”,即使您必须序列化“Decimal()”值。 (3认同)

Aka*_*pal 9

这是一种方法::

{{ "%.2f"|format(result) }}
Run Code Online (Sandbox Code Playgroud)

随意调整:)