一使用內建函數 c
特點
不管其表現形式是怎樣的(
例如"" " " " " " " "")
只要小數分割符是 它就能轉化成計算機能夠識別的字符串形式而且都是計算機處理的時候是沒有那些所謂的千位分隔符的(空格或逗號)而且計算機支持的最大的小數點後面的位數是位目前來說已經夠我們用了
用法:
假設strmun是一個字符串形式的數字則可以這樣寫 ${strnum?c}例如${""?c} 值為
可能用處
對一些表單允許用戶按照個人習慣輸入數字提交的時候統一轉換
二使用預定義的數字格式
有四種預定義的數字格式分別是computer(跟內建函數c功能一樣用法不一樣)currency(貨幣格式)number(數字格式)percent(百分比形式)
特點
這些格式的明確含義是本地化(國家)指定的受 Java 平台安裝環境所控制而不是 FreeMarker所以不建議用這些函數而且受默認數字格式的影響用法不靈活
三使用類似於Java中數字格式語法形式
特點
例如"#"左邊的的個數代表整數部分最少為多少位右邊#"的個數代表小數部分最多為多少位;例如"###"表示整數部分的千位分割符是小數部分最多保留兩位最少保留一位;例如"##%"以百分比的形式表示小數部分最多兩位
用法:
假設strnum是一個數字則可以這樣寫${strnum?string("###")} 例如${?string("###")} 值為
注意
數字格式是本地化敏感的不過我們一般都會給freemarker設置默認的本地化語言問題不大
可能用處
當在某一個地方突然要用到數字格式時調用 string 函數是可以的當在很多地方都需要用到數字格式是這樣處理太麻煩了可以考慮設置默認的數字格式化形式
四局部設置
特點
如果在某個頁面或者某幾個頁面(其它頁面可import進來)用到的數字格式化是相同的可考慮統一配置數字的格式化形式
用法
只需在用到需要格式化的數字之前 設置就可以了格式如下 <#setting number_format="####"> 其中"####"的內容是采用類似於java中數字格式的語法形式也就是以上的第三點
注意
如果用在一個頁面則整個頁面默認就是那種格式除非用string函數覆蓋了默認的格式同樣的如果放在一個公共的頁面其它頁面只要include它也會是同樣的格式
五全局設置
特點
在所有的頁面都默認提供數字的格式化形式
用法
(針對spring)在freemarker的配置文件中設置其默認的數字格式化形式如下
代碼如下
< property name = "freemarkerSettings" >
< props>
< prop key = "number_format"> ##
六捨入處理
有幾種捨入處理方式分別是 roundfloorceiling 和string("")
特點
前面三種從字面上很好理解我們也經常使用要說的最後一種先看一個例子?string("")和?string("") 的值都是 說明如下
在金融和統計學中四捨五入都是根據所謂的一半原則這就意味著對最近的“鄰居”進行四捨五入除非離兩個鄰居距離相等這種情況下它四捨五入到偶數的鄰居如果你注意看 和 的四捨五入的話這在上面的示例中是可以看到的兩個都被四捨五入到因為 是偶數但 和 是奇數
用法假設strnum是一個數字則可以這樣寫${strnum?round(floor/ceiling)} 或者${strmun?string("")}
可能用法
可用在一些對數字精確度不高的情況(分頁處理時也許有用)一些對小數敏感的還是用 string函數
例如
${num?string()}
如果小數點後不足兩位用 代替
${num?string(###)}
如果小數點後多余兩位就只保留兩位否則輸出實際值
輸出為
${num?string(###)}
輸出為
整數部分每三位用 分割並且保證小數點後保留兩位不足用 代替
${num?string(#####)}
輸出為
整數部分每三位用 分割並且小數點後多余兩位就只保留兩位不足兩位就取實際位數可以不不包含小數點
${num?string()}
輸出為
整數部分如果不足三位()前面用補齊否則取實際的整數位
${num?string(###)}
等價於
${num?string(#)}
輸出為
freemarker數字格式化帶來的操作問題
freemarker在解析數據格式的時候自動默認將數字按為分割()這個問題給操作帶來一定的額外處理復雜度解決方法有如下幾種
在模板中直接加toString()轉化數字為字符串如
${languageListidtoString()};
在freemarker配置文件freemarkerproperties加
<#setting number_format="#">或者 <#setting number_format="">;
在模板中直接加<#setting number_format="#">或者<#setting number_format="">如<#if
AdminLanguagePaginationMsg?exists>
<#setting number_format="#">
對於數字的格式化可采用strng 和number_format 設置
數字格式化的優先級 string優先級最高配置文件配置的優先級最低在頁面setting的優先級在兩者之間
整數取實際的位數關於string指令的更多用法可以訪問官方文檔#ref_builtin_string_for_number
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20001.html