使用format-number()函数显示银行帐号

时间:2013-09-18 10:42:34

标签: xslt xpath xslt-1.0 string-formatting

我有一个示例银行帐号:

06101010100075911391740027

我想按照以下方式显示:

06 1010 1010 0075 9113 9174 0027

我尝试了以下代码:

<xsl:decimal-format name="european" decimal-separator="." grouping-separator="&#160;"/>
<xsl:value-of select="format-number(06101010100075911391740027,'##&#160;####&#160;####&#160;####&#160;####&#160;####&#160;0000','european')"/>

但结果远非预期:

  

6 1010 1010 0075 9110 0000 0000

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

为了拥有前导零,您需要使用0位符号而不是#:

<xsl:value-of select="format-number(06101010100075911391740027,
        '00&#160;0000&#160;0000&#160;0000&#160;0000&#160;0000&#160;0000','european')"/>

然而,由于浮点舍入,这仍然导致最后一串9个零。您是否将此数字实际作为XSLT中的数字传递,或者它是字符串值?如果它是一个字符串值,你可以使用concat()和substring():

<xsl:variable name="an" select="'06101010100075911391740027'" />
<xsl:value-of select="concat(substring($an, 1, 2), '&#160;',
                             substring($an, 3, 4), '&#160;',
                             substring($an, 7, 4), '&#160;',
                             substring($an, 11, 4), '&#160;',
                             substring($an, 15, 4), '&#160;',
                             substring($an, 19, 4), '&#160;',
                             substring($an, 23, 4))" />

如果它真的被作为数字数据类型处理,我认为你唯一的选择可能是改变你的方法来代替它来处理它。

答案 1 :(得分:1)

#format-number()的使用意味着该位置上的可能一个数字。但是,#代替0,您也可以使用<xsl:value-of select="format-number(06101010100075911391740027,'00&#160;0000&#160;0000&#160;0000&#160;0000&#160;0000&#160')"/> ,这意味着在该位置应始终一个数字。如果没有找到数字,它将显示0。

{{1}}

上面应该会给你正确的结果。