Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 使用format-number()函数显示银行帐号_Xslt_Xpath_Xslt 1.0_String Formatting - Fatal编程技术网

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

Xslt 使用format-number()函数显示银行帐号,xslt,xpath,xslt-1.0,string-formatting,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(06101010100075911

我有一个银行账号示例:

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')"/>

但结果远非预期:

61010 1010 0075 9110 0000 0000

如何解决此问题?

格式-number()
中使用
意味着该位置上可能有一个数字。但是除了
#
之外,您还可以使用
0
,这意味着在该位置上应该始终是一个数字。如果找不到数字,它将显示0

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


上面应该给出正确的结果。

要获得前导零,需要使用0位符号,而不是#:


但是,由于浮点舍入,这仍然会导致在末尾出现一个9个零的字符串。在XSLT中,这个数字实际上是作为一个数字传递的,还是一个字符串值?如果是字符串值,则只需使用concat()和substring():



如果它真的被当作一个数字数据类型处理,我想你唯一的选择可能是改变你的方法,把它当作一个字符串来处理。

我不能用零,因为有零传递给结果,就像其他答案中提到的那样……好吧,但是为什么舍入(如你所说)会忽略最后9位呢?@tytan这是因为,数字表示为64位双精度IEEE 754值,该值提供了精度。您的数字将以其前16位数字输出,左边的数字将被视为零,因为数据类型不能进一步表示精度。正确的答案在上面,将其视为字符串。毕竟,这才是真正的情况。虽然它是用数字表示的,但它不是一个数字。你永远不会做数学函数来反对它。这是一串数字。
<xsl:value-of select="format-number(06101010100075911391740027,
        '00&#160;0000&#160;0000&#160;0000&#160;0000&#160;0000&#160;0000','european')"/>
<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))" />