XSL 转换格式数字以删除小数点并添加前导零
XSL Transformation format number to remove decimal and add leading zeros
我有一个情况需要将数字 1234.56
格式化为 123456
我可以做到这一点,没问题,我还需要在数字前面添加零以说明12 个空格。我也能做到。问题是我如何结合这两个过程来格式化数字并添加填充?
我的代码:
<xsl:value-of select="format-number(substring(concat(Payment, $Pad50), 1, 12), "0")"/>
我收到以下错误:
Element type "xsl:value-of" must be followed by either attribute specifications, ">" or "/>".
这应该有效
<xsl:value-of select="format-number(Payment * 100, '000000000000')"/>
想法是将 Payment
节点的小数点移动两位(将其乘以 100),然后告诉 format-number
对数字进行零填充,使其为 12长字符(前导 0)。唯一潜在的问题是如果 Payment
有时非常大并且将其乘以 100 可能会导致溢出 - 但您的 12 位数字上限表明这不应该成为问题。
您的原始代码有几个问题:
- 您错误地将最后一个参数传递给
format-number
- 使用 '
而不是 "
,否则处理器认为您正在关闭 select
属性并且不知道如何处理 0
和另一个 "
.
concat
和 substring
将成为 return 字符串 - format-number
需要一个数字作为第一个参数。如果将字符串转换为 number
,您将丢失所有填充的零。
您可以使用一组不同的函数 - 假设 $Pad50
是一个由十二个零组成的字符串:
<xsl:value-of select="substring(translate(concat($Pad50, Payment), '.', ''), string-length(Payment), 12)" />
但这会变得混乱。
我有一个情况需要将数字 1234.56
格式化为 123456
我可以做到这一点,没问题,我还需要在数字前面添加零以说明12 个空格。我也能做到。问题是我如何结合这两个过程来格式化数字并添加填充?
我的代码:
<xsl:value-of select="format-number(substring(concat(Payment, $Pad50), 1, 12), "0")"/>
我收到以下错误:
Element type "xsl:value-of" must be followed by either attribute specifications, ">" or "/>".
这应该有效
<xsl:value-of select="format-number(Payment * 100, '000000000000')"/>
想法是将 Payment
节点的小数点移动两位(将其乘以 100),然后告诉 format-number
对数字进行零填充,使其为 12长字符(前导 0)。唯一潜在的问题是如果 Payment
有时非常大并且将其乘以 100 可能会导致溢出 - 但您的 12 位数字上限表明这不应该成为问题。
您的原始代码有几个问题:
- 您错误地将最后一个参数传递给
format-number
- 使用'
而不是"
,否则处理器认为您正在关闭select
属性并且不知道如何处理0
和另一个"
. concat
和substring
将成为 return 字符串 -format-number
需要一个数字作为第一个参数。如果将字符串转换为number
,您将丢失所有填充的零。您可以使用一组不同的函数 - 假设
$Pad50
是一个由十二个零组成的字符串:<xsl:value-of select="substring(translate(concat($Pad50, Payment), '.', ''), string-length(Payment), 12)" />
但这会变得混乱。