010_数字内建函数
1. abs
1.1. 給出數字的絕對值。
2. c(當被用作是數字值時)
2.1. 該內建函數將"計算機語言"的數字轉換成字符串, 這都是對計算機來說的, 而不是對用戶。也就是說, 它根據程序語言的用法來進行格式化, 這對于FreeMarker的所有本地數字格式化設置來說是獨立的。它通常使用點來作為小數分隔符, 而且它從來不用分組分隔符(像3,000,000)。
2.2. 它最多在小數點后打印16位。
2.3. 該內建函數非常嚴格, 因為作為默認(像${x}這樣)數字被本地(語言, 國家)特定的數字格式轉換為字符串, 這是讓用戶來看的(比如3000000可能會被打印為3,000,000)。
2.4. 中國本地顯示
2.5. 德國本地顯示(德國小數點使用逗號, 分隔符使用點號)
3. lower_abc
3.1. 將1, 2, 3等..., 轉換為字符串"a", "b", "c"等...當到達"z"時, 那么會繼續轉換成如: "aa", "ab"等...這和電子表格應用程序(比如Excel或Calc)的列標簽有著相同的邏輯。數字的最小值是1。沒有上限值。如果數字是0或更小或它不是整數, 那么模板處理將會中止并發生錯誤。
4. upper_abc
4.1.?和lower_abc相同, 但是它轉換成大寫字母, 比如: "A", "B", "C", … , "AA", "AB", 等...
5. round
5.1. round: 返回最近的整數。如果數字以.5結尾, 那么它將進位(也就是向正無窮方向進位)。
6. floor
6.1. floor: 返回數字的舍掉小數后的整數(也就是向負無窮舍棄)。
7. ceiling
7.1. ceiling: 返回數字小數進位后的整數(也就是向正無窮進位)。
8. string(當用作是數字類型時)
8.1. 將一個數字轉換成字符串。它使用程序員通過number_format和locale設置的默認格式。也可以明確地用這個內建函數再指定一個數字格式。
8.2. 有四種預定義的數字格式: computer, currency(貨幣), number和percent。這些格式的明確含義是本地化(國家)指定的, 受Java平臺安裝環境所控制, 而不是FreeMarker。
8.3. computer和c內建函數是相同的格式。
8.4. Java數字格式語法(java.text.DecimalFormat)
8.4.1. pattern="0", 這里的0代表數字, 如果number的位數大于等于pattern的0的個數, result=number。否則不夠的位數以0填充。
8.4.2. #號和0的含義相同, 都是代表數字, 不同的是其不會用0填充, 不夠位數就不顯示。
8.4.3. E使用科學計數法。
8.4.4. 在金融和統計學實踐中, 四舍五入都是根據所謂的一半原則, 這就意味著對最近的"鄰居"進行四舍五入, 除非離兩個鄰居距離相等, 這種情況下, 它四舍五入到偶數的鄰居。
9. 例子
9.1. 新建一個名為FMBuiltInsForNumber的動態Web工程, 同時添加相關jar包。
9.2. 編寫FMFactory.java
package com.fm.util;import java.util.Locale; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import freemarker.template.Configuration; import freemarker.template.TemplateExceptionHandler;public class FMFactory {private final static FMFactory instance = new FMFactory();private FMFactory() {}public static FMFactory getInstance() {return instance;}private Map<String, Configuration> map = new ConcurrentHashMap<String, Configuration>();// 創建單個Configuration實例public synchronized Configuration getCfg(Object servletContext, String path) {if(null != map.get(path)) {return map.get(path);}Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);cfg.setServletContextForTemplateLoading(servletContext, path);cfg.setDefaultEncoding("utf-8");// 數值格式化模式cfg.setNumberFormat("computer");// 本地化設置, 中文中國cfg.setLocale(Locale.CHINA);cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);map.put(path, cfg);return cfg;}}9.3. 編寫FMBuiltInsForNumber.java
package com.fm.action;import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fm.util.FMFactory; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException;public class FMBuiltInsForNumber extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Configuration cfg = FMFactory.getInstance().getCfg(req.getServletContext(), "/WEB-INF/templates");Template template = cfg.getTemplate("builtinsfornumber.html");Map<String, Object> root = new HashMap<String, Object>();Writer out = new OutputStreamWriter(resp.getOutputStream());try {template.process(root, out);} catch (TemplateException e) {e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }9.4. 修改web.xml
9.5. 在/WEB-INF/templates下編寫builtinsfornumber.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>數字內建函數</title></head><body><h2>給出數字的絕對值</h2>${-5?abs}<h2>c(當被用作是數字值時)</h2>300000: ${300000}<br />0.333333333333333333355555555: ${0.333333333333333333355555555}<br />300000?c: ${300000?c}<br />0.333333333333333333355555555?c: ${0.333333333333333333355555555?c}<h2>將1, 2, 3等..., 轉換為字符串"a", "b", "c"等</h2><#list 1..30 as n>${n?lower_abc} </#list><h2>將1, 2, 3等..., 轉換為字符串"A", "B", "C"等</h2><#list 1..30 as n>${n?upper_abc} </#list><h2>返回最近的整數</h2>${3.1?round}<br />${3.5?round}<br />${3.9?round}<h2>返回數字的舍掉小數后的整數</h2>${3.1?floor}<br />${3.5?floor}<br />${3.9?floor}<h2>返回數字小數進位后的整數</h2>${3.1?ceiling}<br />${3.5?ceiling}<br />${3.9?ceiling}<h2>string(當用作是數字類型時)</h2><#assign x=4200>${x}<br /><#-- the same as ${x} -->string: ${x?string}<br /> string.computer: ${x?string.computer}<br /><#-- string.currency貨幣格式 -->string.currency: ${x?string.currency}<br />string.number: ${x?string.number}<br />string.percent: ${x?string.percent}${x?string["0"]}<br /><br />1.234使用"0.#"模式: ${1.234?string["0.#"]}<br />1.234使用"0.##"模式: ${1.234?string["0.##"]}<br />1.234使用"0.###"模式: ${1.234?string["0.###"]}<br />1.234使用"0.####"模式: ${1.234?string["0.####"]}<br /><br />1使用"000.00"模式: ${1?string["000.00"]}<br />12.1使用"000.00"模式: ${12.1?string["000.00"]}<br />123.456使用"000.00"模式: ${123.456?string["000.00"]}<br /><br />1.2使用"0"模式: ${1.2?string["0"]}<br />1.8使用"0"模式: ${1.8?string["0"]}<br />1.5使用"0"模式: ${1.5?string["0"]}<br />2.5使用"0"模式: ${2.5?string["0"]}<br /><br />12345使用"0.##E0"模式: ${12345?string["0.##E0"]}</body> </html>9.6. 運行項目
總結
以上是生活随笔為你收集整理的010_数字内建函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 009_字符串内建函数
- 下一篇: 011_布尔值内建函数