5.6 格式化行为 5.6.1 formatNumber标签

5.6 格式化行为

JSTL提供了格式化和解析数字与日期的标签,它们是formatNumberformatDatetimeZonesetTimeZoneparseNumberparseDate

引用格式化标签库

要使用这些标签,首先要在JSP页面中使用taglib指令引入格式化标签库,如下所示:

1
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

如果忘了导入库,则eclipse中会显示如下错误信息:

1
Unknown tag (fmt:formatNumber).

5.6.1 formatNumber标签

formatNumber用于格式化数字。这个标签使你可以根据需要,利用它的各种属性来获得自己想要的格式。formatNumber的语法有两种形式。

第一种形式没有body content

1
2
3
4
5
6
7
8
9
10
11
12
13
<fmt:formatNumber value="numericValue"
[type="{number|currency|percent}"]
[pattern="customPattern"]
[currencyCode="currencyCode"]
[currencySymbol="currencySymbol"]
[groupingUsed="{true|false}"]
[maxIntegerDigits="maxIntegerDigits"]
[minIntegerDigits="minIntegerDigits"]
[maxFractionDigits="maxFractionDigits"]
[minFractionDigits="minFractionDigits"]
[var="varName"]
[scope="{page|request|session|application}"]
/>

第二种形式有body content

1
2
3
4
5
6
7
8
9
10
11
12
13
<fmt:formatNumber [type="{number|currency|percent}"]
[pattern="customPattern"]
[currencyCode="currencyCode"]
[currencySymbol="currencySymbol"]
[groupingUsed="{true|false}"]
[maxIntegerDigits="maxIntegerDigits"]
[minIntegerDigits="minIntegerDigits"]
[maxFractionDigits="maxFractionDigits"]
[minFractionDigits="minFractionDigits"]
[var="varName"]
[scope="{page|request|session|application}"]>
numeric value to be formatted
</fmt:formatNumber>

body contentJSP代码

formatNumber标签的属性

属性 类型 描述
value+ 字符串或数字 要格式化的数字化值
type+ 字符串 说明该值是要被格式化成数字货币,还是百分比。对应的属性值分别为numbercurrencypercent
pattern+ 字符串 定制格式化样式
currencyCode+ 字符串 ISO 4217货币码,仅当type="currency"时使用
currencySymbol+ 字符串 货币符号,仅当type="currency"时使用
groupingUsed+ 布尔 说明输出结果中是否包含组分隔符
maxIntegerDigits+ 整数 规定输出结果的整数部分最多几位数字
minIntegerDigits+ 整数 规定输出结果的整数部分最少几位数字
maxFractionDigits+ 整数 规定输出结果的小数部分最多几位数字
minFractionDigits+ 整数 规定输出结果的小数部分最少几位数字
var 字符串 将输出结果存为字符串的有界变量名称
scope 字符串 var的范围。如果有scope属性,则必须指定var属性

formatNumber标签的用途之一就是将数字格式化成货币。为此,可以利用currencyCode属性来定义一个ISO 4217货币代码。

格式化样式pattern说明

符号 描述
0 代表一位数字
E 使用指数格式
# 代表一位数字,若没有则显示0,前导0和末尾0不显示。
. 小数点
, 数字分组分隔符
; 分隔格式
- 使用默认负数前缀
% 百分数
? 千分数
xxxxxxx 货币符号,使用实际的货币符号代替,如使用$,等等
X 指定可以作为前缀或后缀的字符
' 在前缀或后缀中引用特殊字符

formatNumber的用法范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!-- 引入格式化标签库 -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
......
<!-- 格式化为数字,原样输出 -->
<fmt:formatNumber value="12" type="number" />
<br>
<!-- 格式化为数字,整数部分最少是3位数字 -->
<fmt:formatNumber value="12" type="number" minIntegerDigits="3" />
<br>
<!-- 格式化为数字,小数部分最少是2位数字 -->
<fmt:formatNumber value="12" type="number" minFractionDigits="2" />
<br>
<!-- 使用自定义格式,保留小数掉后三位 -->
<!-- `0`代表一位数字 -->
<!-- `.`小数点 -->
<fmt:formatNumber value="123456.78" pattern=".000" />
<br>
<!-- `#`代表一位数字,若没有则显示0,前导0和末尾0不显示。 -->
<!-- `,`数字分组分隔符 -->
<fmt:formatNumber value="123456.78" pattern="#,#00.0#" />
<br>
<!-- 格式化为货币 -->
<fmt:formatNumber value="12" type="currency" />
<br>
<!-- 设置地区为美国 -->
<fmt:setLocale value="en_US"/>
<!-- 格式化为货币,取决于默认地区-->
<fmt:formatNumber value="12" type="currency"/>
<br>
<!-- 格式化为百分数 -->
<fmt:formatNumber value="0.12" type="percent" />
<br>
<!-- 格式化为百分数,百分数小数点后面最少要有两位 -->
<fmt:formatNumber value="0.125" type="percent" minFractionDigits="2" />
<br>

结果如下:

1
2
3
4
5
6
7
8
9
12
012
12.00
123456.780
123,456.78
¥12.00
$12.00
12%
12.50%