Ftl 數據處理總結

結合網上資料再次整理一下freemarket在數據處理上的技巧

  1. 內建函數c

       trmun是一個字符串形式的數字,則可以這樣寫${strnum?c},例如${"123,456.123,456"?c}值爲123456.123456 
    
  2. 預定義的數字格式: currency(貨幣),number(數字格式),percent(百分比) ,其中number是默認格式

       這些格式的明確含義是本地化(國家)指定的,受Java平臺安裝環境所控制,而不是FreeMarker,所以不建議用這些函數,而且受默認數字格式的影響,用法不靈活。 
    
  3. 使用類似於Java中數字格式語法形式

     特點:
           例如"0.#",左邊的'0'的個數代表整數部分最少爲多少位,右邊'#"的個數代表小數部分最多爲多少位;例如",##0.0#"表示整數部分的千位分割符是',',小數部分最多保留兩位,最少保留一位;例如"0.##%"以百分比的形式表示,小數部分最多兩位。 
     用法:
           假設strnum是一個數字,則可以這樣寫${strnum?string(",##0.0#")},例如${123456.123456?string(",##0.0#")}值爲123,456.12
     注意:
           數字格式是本地化敏感的,不過我們一般都會給freemarker設置默認的本地化語言,問題不大。 
    可能用處: 
       當在某一個地方突然要用到數字格式時,調用string函數是可以的,當在很多地方都需要用到數字格式是,這樣處理太麻煩了,可以考慮設置默認的數字格式化形式 
    

4.局部設置

特點: 
     如果在某個頁面,或者某幾個頁面(其它頁面可import進來),用到的數字格式化是相同的,可考慮統一配置數字的格式化形式 
用法: 
     只需在用到需要格式化的數字之前設置就可以了,格式如下:<#settingnumber_format=",##0.##">其中",##0.##"的內容是採用類似     於java中數字格式的語法形式,也就是以上的第三點。 
注意: 
     如果用在一個頁面,則整個頁面默認就是那種格式,除非用string函數覆蓋了默認的格式,同樣的,如果放在一個公共的頁面,其它頁面只要include它,也會是同樣的格式。

5.全局設置

特點: 
     在所有的頁面都默認提供數字的格式化形式用法 
(針對spring):在freemarker的配置文件中設置其默認的數字 格式化形式,如下:
<propertyname="freemarkerSettings"> 
  <props> 
      ..... 
     <propkey="number_format">0.##</prop> 
      ...... 
  </props> 
</property> 

6.舍入處理

 有幾種舍入處理方式,分別是 round,floor,ceiling 和           string("0") 
 特點: 
   前面三種,從字面上很好理解,我們也經常使用,要說的最後一種,先看一個例子1.5?string("0")和2.5?string("0") 的值都是2 說明如下: 
   在金融和統計學中,四捨五入都是根據所謂的一半原則,這就意味着對最近的“鄰居”進行四捨五入,除非離兩個鄰居距離相等,這種情況下,它四捨五入到偶數的鄰居。如果你注意看 1.5 和 2.5 的四捨五入的話,這在上面的示例中是可以看到的,兩個都被四捨五入到2,因爲 2 是偶數,但 1 和 3 是奇數。 

  用法:假設strnum是一個數字,則可以這樣寫${strnum?   round(floor/ceiling)} 或者${strmun?string("0")} 

 可能用法: 
    可用在一些對數字精確度不高的情況(分頁處理時也許有用),一些對小數敏感的,還是用 string函數 

  例如: 

one

${num?string('0.00')}  如果小數點後不足兩位,用 0代替 並且四捨五入效果同${num?string('#.00')}

two

${num?string('#.##')}如果小數點後多餘兩位,就只保留兩位,否則輸出實際值 

three

${num?string(',###.00')} 整數部分每三位用 , 分割,並且保證小數點後保留兩位,不足用 0 代替 

four

${num?string('000.00')} 整數部分如果不足三位(000),前面用0補齊,否則取實際的整數位 

7.freemarker數字格式化帶來的操作問題

  freemarker在解析數據格式的時候,自動默認將數字按3爲分割(1,000),這個問題給操作帶來一定的額外處理複雜度,解決方法有如下幾種: 
  1、在模板中直接加.toString()轉化數字爲字符串,如: 
 複製代碼 代碼如下:
  ${languageList.id.toString()}; 
  2、在freemarker配置文件freemarker.properties加 
  複製代碼 代碼如下:

<#setting number_format="#">或者 <#setting number_format="0">; 

  3、在模板中直接加<#setting number_format="#">或者<#setting number_format="0">,如:<#if 
 複製代碼 代碼如下:

  AdminLanguagePaginationMsg?exists> 
<#setting number_format="#"> 

 對於數字的格式化,可採用strng 和number_format 設置 
 數字格式化的優先級: string優先級最高,配置文件配置的優先級最低,在頁面setting的優先級在兩者之間。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章