format-number()函数可按指定格式将数字转为字符串,支持千位分隔、小数位控制、百分比、货币符号及多语言环境。通过pattern定义格式,如#,##0.00保留两位小数并千位分隔,0强制显示零,%转为百分比,¤表示货币符号,分号区分正负数格式。结合xsl:decimal-format可定义小数点、分组符、NaN等本地化规则,实现国际化显示,如德语用逗号作小数点。需注意#不显示无意义零,0强制补零,避免格式错误;特殊值NaN和Infinity应通过decimal-format自定义提示;复杂模式应逐步调试;海量数据时简单格式化可考虑替代函数提升性能。

在XPath里,
format-number()
format-number()
format-number(number, pattern, [decimal-format-name])
number
pattern
#
0
,
.
decimal-format-name
xsl:decimal-format
举个最简单的例子:
假设你想把数字
12345.678
format-number(12345.678, '#,##0.00')
"12,345.68"
如果只是想保留整数,没有小数:
format-number(12345.678, '#')
"12346"
想展示百分比?
format-number(0.123, '0.0%')
"12.3%"
谈到
format-number()
pattern
#
#.##
12.3
12.3
12.00
12
0
000.00
1.2
001.20
.
,
decimal-format
#,##0.00
-
%
¤
xsl:decimal-format
;
'#,##0.00;(#,##0.00)'
举个例子,如果我有一个销售额
987654.321
format-number(987654.321, '¤#,##0.00')
decimal-format
$987,654.32
处理数字格式,特别是涉及到国际化时,
format-number()
decimal-format-name
#
0
这时候,XSLT里的
xsl:decimal-format
format-number()
xsl:decimal-format
name
format-number()
decimal-separator
.
grouping-separator
,
infinity
infinity
NaN
NaN
percent
%
per-mille
‰
zero-digit
0
digit
#
pattern-separator
;
来看个实际例子,我们要同时支持英语和德语的数字格式:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 英语格式定义 -->
<xsl:decimal-format name="en-format"
decimal-separator="."
grouping-separator=","
infinity="Infinity"
NaN="NaN"/>
<!-- 德语格式定义 -->
<xsl:decimal-format name="de-format"
decimal-separator=","
grouping-separator="."
infinity="Unendlich"
NaN="Keine Zahl"/>
<xsl:template match="/">
<output>
<number-en>
<!-- 使用英语格式模式 -->
<xsl:value-of select="format-number(1234567.89, '#,##0.00', 'en-format')"/>
</number-en>
<number-de>
<!-- 使用德语格式模式 -->
<xsl:value-of select="format-number(1234567.89, '#.##0,00', 'de-format')"/>
</number-de>
<nan-en>
<xsl:value-of select="format-number(0 div 0, '0', 'en-format')"/>
</nan-en>
<nan-de>
<xsl:value-of select="format-number(0 div 0, '0', 'de-format')"/>
</nan-de>
</output>
</xsl:template>
</xsl:stylesheet>这段代码会输出:
<output> <number-en>1,234,567.89</number-en> <number-de>1.234.567,89</number-de> <nan-en>NaN</nan-en> <nan-de>Keine Zahl</nan-de> </output>
你看,通过
xsl:decimal-format
NaN
我在用
format-number()
一个很经典的误区就是
#
0
#.##
12.00
12
12.00
0
#,##0.00
0
#
0
另一个让人头大的情况是,当数字本身就是
NaN
infinity
xsl:decimal-format
NaN
infinity
xsl:decimal-format
NaN
infinity
还有就是模式字符串的复杂性。有时候,为了实现一个非常精细的格式,比如正数、负数、零值分别有不同的显示方式,模式字符串会变得很长,比如
'#,##0.00;(#,##0.00);Zero'
最后一点心得,是关于性能的。虽然
format-number()
substring-before
concat
round()
floor()
format-number()
以上就是XPath的format-number()函数怎么格式化数字?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号