如何使用浮点过滤器仅显示小数点后两位?
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】:您可以使用round
将float
格式化为给定的精度。
摘自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));
【讨论】:
以上是关于如何使用浮点过滤器仅显示小数点后两位?的主要内容,如果未能解决你的问题,请参考以下文章