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 位数字上限表明这不应该成为问题。

您的原始代码有几个问题:

  1. 您错误地将最后一个参数传递给 format-number - 使用 ' 而不是 ",否则处理器认为您正在关闭 select 属性并且不知道如何处理 0 和另一个 ".
  2. concatsubstring 将成为 return 字符串 - format-number 需要一个数字作为第一个参数。如果将字符串转换为 number,您将丢失所有填充的零。
  3. 您可以使用一组不同的函数 - 假设 $Pad50 是一个由十二个零组成的字符串:

    <xsl:value-of select="substring(translate(concat($Pad50, Payment), '.', ''), string-length(Payment), 12)" />
    

但这会变得混乱。