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=" "/> <xsl:value-of select="format-number(06101010100075911
06101010100075911391740027
我想按如下方式显示它:
06 1010 1010 0075 9113 9174 0027
我尝试了以下代码:
<xsl:decimal-format name="european" decimal-separator="." grouping-separator=" "/>
<xsl:value-of select="format-number(06101010100075911391740027,'## #### #### #### #### #### 0000','european')"/>
但结果远非预期:
61010 1010 0075 9110 0000 0000
如何解决此问题?在格式-number()
中使用
意味着该位置上可能有一个数字。但是除了#
之外,您还可以使用0
,这意味着在该位置上应该始终是一个数字。如果找不到数字,它将显示0
<xsl:value-of select="format-number(06101010100075911391740027,'00 0000 0000 0000 0000 0000 ')"/>
上面应该给出正确的结果。要获得前导零,需要使用0位符号,而不是#:
但是,由于浮点舍入,这仍然会导致在末尾出现一个9个零的字符串。在XSLT中,这个数字实际上是作为一个数字传递的,还是一个字符串值?如果是字符串值,则只需使用concat()和substring():
如果它真的被当作一个数字数据类型处理,我想你唯一的选择可能是改变你的方法,把它当作一个字符串来处理。我不能用零,因为有零传递给结果,就像其他答案中提到的那样……好吧,但是为什么舍入(如你所说)会忽略最后9位呢?@tytan这是因为,数字表示为64位双精度IEEE 754值,该值提供了精度。您的数字将以其前16位数字输出,左边的数字将被视为零,因为数据类型不能进一步表示精度。正确的答案在上面,将其视为字符串。毕竟,这才是真正的情况。虽然它是用数字表示的,但它不是一个数字。你永远不会做数学函数来反对它。这是一串数字。
<xsl:value-of select="format-number(06101010100075911391740027,
'00 0000 0000 0000 0000 0000 0000','european')"/>
<xsl:variable name="an" select="'06101010100075911391740027'" />
<xsl:value-of select="concat(substring($an, 1, 2), ' ',
substring($an, 3, 4), ' ',
substring($an, 7, 4), ' ',
substring($an, 11, 4), ' ',
substring($an, 15, 4), ' ',
substring($an, 19, 4), ' ',
substring($an, 23, 4))" />