XSLT精确小数格式兼容问题求助:需适配两种数值场景
XSL format-number 兼容0值和千分位格式的解决方案
问题描述
输入XML包含两种数值场景:
<sets> <set> <total>0.00</total> </set> <set> <total>5787.43</total> </set> </sets>
原使用format-number(number($cur_value), '###,###.00')时,0.00会输出$.00(缺失整数位0);改用###,###0.00时,5787.43会丢失千分位变成$5787.43。需要实现两种场景都符合预期的格式化:0.00输出$0.00,5787.43输出$5,787.43。
解决方案
使用#,##0.00作为格式字符串即可同时覆盖两种场景:
<xsl:value-of select="concat('$', format-number(number($cur_value), '#,##0.00'))"/>
格式说明
#:表示可选数字,不存在则不显示,用于千分位分隔前的高位数字;0:表示强制显示数字,即使数值为0也会展示整数位的0;,##:指定每三位添加千分位分隔符的规则;.00:强制保留两位小数。
完整示例代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/sets"> <xsl:for-each select="set"> <xsl:variable name="cur_value" select="total"/> <xsl:value-of select="concat('$', format-number(number($cur_value), '#,##0.00'))"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
输出结果
$0.00 $5,787.43
内容的提问来源于stack exchange,提问作者User501
相关产品推荐
相关产品推荐

