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

83

我正在使用Flask/Jinja2模板使用|float过滤器来展示一个数字。

这是我的代码:

{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)

输出有些别扭:

17/189 (8.99470899471%)

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

期望输出:

17/189 (8.99%)
4个回答

104
很简单:
我的代码:
{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)

可以稍微更改一下:

{% set proc_err = nb_err|length / sum * 100 %}
({{'%0.2f' % proc_err|float}}%)

或者使用format

({{'%0.2f'| format(proc_err|float)}}%)

可以在jinja2 github issue 70中找到参考资料。


1
有没有一种方法可以在当前模板中设置特定的精度(例如0.3f)作为默认值?只是为了避免重复? - GertVdE

87

您可以使用 roundfloat 格式化为指定的精度。

文档 中提取:

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

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

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

如果未指定方法,则默认使用 common

{{ 42.55|round }}
    -> 43.0
{{ 42.55|round(1, 'floor') }}
    -> 42.5

请注意,即使精度舍入为0,也会返回一个float。如果您需要真正的整数,请将其通过int管道传输:
{{ 42.55|round|int }}
    -> 43

2
除非您必须序列化一个Decimal()值,否则round(2)永远不会返回'42.00'。 - lol
@lol 这个问题是关于四舍五入而不是格式化的。即使 OP 想要格式化,打印小数也涉及到本地化。四舍五入是一个数学运算,而打印格式化值只是视觉上的。在 OP 的问题中,打印 100% 要比 100.00% 好 ;) - Paolo Casciello
是的,你说得对,你发现我在代码库中放了一个令人尴尬的小技巧。哈哈! - lol

37

这里是一个方法::

{{ "%.2f"|format(result) }}

按您的喜好微调它 :)


-3

(我假设你使用的是Ionic v2)

使用以下前端代码:

<div *ngIf="device.usage > 0">
   {{ Round(device.usage)}} min  
</div>

并将以下函数放入.ts文件中:

Round(number):number
{
    return parseFloat(Number((number/1000) / 60).toFixed(2)); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接