1、使用內建函數c
特色:
無論其表現形式是怎樣的(例如"123,456.123,456"、"123456.123456"、"000123456.123456000"、"123,456.123456"、"1,2345,6.123456"),只要小數分割符是'.'它就能轉化成計算機可以識別的字符串形式,並且都是123456.123456,計算機處理的時候是沒有那些所謂的千位分隔符的(空格或逗號),並且計算機支持的最大的小數點後面的位數是16位,目前來講,已經夠咱們用了。
用法:
假設strmun是一個字符串形式的數字,則能夠這樣寫${strnum?c},例如${"123,456.123,456"?c}值爲123456.123456
可能用處:
對一些表單容許用戶按照我的習慣輸入數字,提交的時候統一轉換
2、使用預約義的數字格式
有四種預約義的數字格式,分別是computer(跟內建函數c功能同樣,用法不同)、currency(貨幣格式)、number(數字格式)、percent(百分比形式)
特色:
這些格式的明確含義是本地化(國家)指定的,受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的配置文件中設置其默認的數字格式化形式,以下: java
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函數
例如: spring
若是小數點後不足兩位,用 0 代替 函數
若是小數點後多餘兩位,就只保留兩位,不然輸出實際值
輸出爲:1239765.46 spa
輸出爲:1,239,765.46
整數部分每三位用 , 分割,而且保證小數點後保留兩位,不足用 0 代替 orm
輸出爲:1,239,765.46
整數部分每三位用 , 分割,而且小數點後多餘兩位就只保留兩位,不足兩位就取實際位數,能夠不不包含小數點 字符串
輸出爲:012.70
整數部分若是不足三位(000),前面用0補齊,不然取實際的整數位 string
等價於 io
輸出爲:12.70
freemarker數字格式化帶來的操做問題
freemarker在解析數據格式的時候,自動默認將數字按3爲分割(1,000),這個問題給操做帶來必定的額外處理複雜度,解決方法有以下幾種:
一、在模板中直接加.toString()轉化數字爲字符串,如: form
二、在freemarker配置文件freemarker.properties加 模板
三、在模板中直接加<#setting number_format="#">或者<#setting number_format="0">,如:<#if
對於數字的格式化,可採用strng 和number_format 設置
數字格式化的優先級: string優先級最高,配置文件配置的優先級最低,在頁面setting的優先級在二者之間。
7、總結 對於數字的格式化,可採用strng和number_format設置 數字格式化的優先級:string優先級最高,配置文件配置的優先級最低,在頁面setting的優先級在二者之間。