2012-06-29 143 views
31

我使用Flask/Jinja2模板來顯示一個數字,使用| float過濾器。如何使用float filter在小數點後顯示兩位數?

這裏是我的代碼

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

輸出是一個有點尷尬:

17/189 (8.99470899471%) 

我正在尋找一種方法,使一個點之後的名額限制在一個數量例如2.

所需的輸出:

17/189 (8.99%) 

回答

48

原來是相當簡單:

我的代碼:

{% 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

34

您可以使用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 
+0

這應該被標記爲正確答案 – bcattle

+0

除了'輪(2)'即使你必須序列化一個「Decimal()」值,也不會返回'42.00'。 – lol

+0

@lol這個問題是關於舍入不格式。即使OP想要格式化。打印小數點還會處理語言環境。舍入是一種數學運算,而打印格式化值只是視覺效果。在OP問題中,雖然打印100%比100.00%更好;) –

-2

(我假設你使用離子V2)

使用此前端代碼:

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

,並把以下功能進入。TS文件:

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

這裏有一個方法::

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

調整它,只要你喜歡:)

相關問題