【问题标题】:How to use float filter to show just two digits after decimal point?如何使用浮点过滤器仅显示小数点后两位?
【发布时间】:2012-06-30 21:19:58
【问题描述】:

我正在使用 Flask/Jinja2 模板通过 |float 过滤器显示数字。

这是我的代码

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

输出有点尴尬:

17/189 (8.99470899471%)

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

期望的输出:

17/189 (8.99%)

【问题讨论】:

    标签: flask wsgi jinja2


    【解决方案1】:

    其实很简单:

    我的代码:

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

    可以稍微修改一下:

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

    或使用格式

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

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

    【讨论】:

    • 有没有办法在当前模板中将某个精度(如 0.3f)设置为默认值?只是为了避免重复?
    【解决方案2】:

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

    摘自the docs:

    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
    

    【讨论】:

    • 除非 round(2) 永远不会返回 '42.00',即使您必须序列化 Decimal() 值。
    • @lol 问题是关于舍入而不是格式化。即使OP想要格式化。打印小数也处理语言环境。舍入是一种数学运算,而打印格式化值只是视觉上的。在 OP 问题中,虽然打印 100% 比打印 100.00% 更好;)
    • 是的,你是对的,并且发现我在代码库中丢了一个令人尴尬的偷偷摸摸的黑客。大声笑!
    【解决方案3】:

    这是一种方法::

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

    随心所欲地调整它:)

    【讨论】:

      【解决方案4】:

      (我假设您使用 Ionic v2)

      使用这个前端代码:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-22
        • 2010-10-08
        • 2011-09-03
        • 2011-11-18
        • 2018-02-12
        • 2011-03-10
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        相关资源
        最近更新 更多