我有一个案例,我需要将数字格式1234.56
格式化为123456
我可以做到这一点没问题,我还需要在数字的前面加上填充零,以便占用12个空格。我也可以这样做。问题是如何组合这两个进程来格式化数字并添加填充?
我的代码:
<xsl:value-of select="format-number(substring(concat(Payment, $Pad50), 1, 12), "0")"/>
我收到错误:
元素类型“xsl:value-of”必须后跟属性规范,“&gt;”或“/&gt;”。
答案 0 :(得分:3)
这应该有效
<xsl:value-of select="format-number(Payment * 100, '000000000000')"/>
您的想法是,您将Payment
节点的两位小数点移动(乘以100),然后告诉format-number
将数字填零,以便#&1#} 39;长12个字符(前导0)。唯一可能的问题是,如果Payment
有时非常大并且乘以100会导致溢出 - 但是您的12位数上限表明不应该成为问题。
您的原始代码存在一些问题:
format-number
- 使用'
代替"
,否则处理器会认为您正在关闭select
属性并且我不知道如何处理0
和另一个"
。concat
和substring
将返回字符串 - format-number
期望一个数字作为第一个参数。如果您将字符串转换为number
,则会丢失所有填充的零。您可以使用一组不同的函数 - 假设$Pad50
是一个由十二个零组成的字符串:
<xsl:value-of select="substring(translate(concat($Pad50, Payment), '.', ''), string-length(Payment), 12)" />
但这会变得混乱。