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

Posted

技术标签:

【中文标题】如何使用浮点过滤器仅显示小数点后两位?【英文标题】: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%)

【问题讨论】:

【参考方案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)); 

【讨论】:

以上是关于如何使用浮点过滤器仅显示小数点后两位?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C:如何格式化浮点值以仅显示小数,没有完整数字或小数点?

每次使用C#如何显示小数点后两位? [复制]

如何仅显示小数点后 2 位的值

使用python以两位小数格式化excel数字

C#中怎么对double型取两位小数。

vue自定义指令(过滤器/函数)保留小数点后两位