XSLT 1.0 删除前导零并将小数点添加到值

Posted

技术标签:

【中文标题】XSLT 1.0 删除前导零并将小数点添加到值【英文标题】:XSLT 1.0 Remove leading zeros and add decimal point to a value 【发布时间】:2018-11-05 18:34:40 【问题描述】:

我正在使用 XSLT 1.0 并尝试删除所有前导零并在最后 2 个数字之前添加一个小数点。字符数始终相同。

例子:

0001094125需要翻译成10941.25 0000042000 需要翻译成 420.00 0000040458需要翻译成404.58 0000153800需要翻译成1538.00

我使用 format-number() 阅读是一个选项,但我不希望进行任何舍入。任何想法如何做到这一点? 谢谢!

【问题讨论】:

【参考方案1】:

你应该可以使用format-number()而不用四舍五入...

XML 输入

<doc>
    <test>0001094125</test>
    <test>0000042000</test>
    <test>0000040458</test>
    <test>0000153800</test>
</doc>

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="test">
    <xsl:copy>
      <xsl:value-of select="format-number(normalize-space() div 100,'#.00')"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

输出

<doc>
   <test>10941.25</test>
   <test>420.00</test>
   <test>404.58</test>
   <test>1538.00</test>
</doc>

工作小提琴:http://xsltfiddle.liberty-development.net/3NzcBu8/1

或者,您可以格式化数字以删除前导零,然后您可以使用 substring() 连接字符串的第一部分、小数点和字符串的最后部分(基于字符串长度)。

示例...

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="test">
    <xsl:copy>
      <xsl:variable name="nbr" select="format-number(normalize-space(),'#')"/>
      <xsl:variable name="length" select="string-length($nbr)"/>
      <xsl:value-of 
        select="concat(substring($nbr,1,$length - 2),'.',substring($nbr, $length - 1))"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

输出

<doc>
   <test>10941.25</test>
   <test>420.00</test>
   <test>404.58</test>
   <test>1538.00</test>
</doc>

工作小提琴:http://xsltfiddle.liberty-development.net/3NzcBu8

【讨论】:

谢谢丹尼尔!

以上是关于XSLT 1.0 删除前导零并将小数点添加到值的主要内容,如果未能解决你的问题,请参考以下文章

从Excel中删除尾随零并将小数点添加到字符串

带小数的前导零,Javascript

使用 XSLT 将 XML 转换为 XML 删除前导空格和零

在 XSLT 1.0 中使用前导零填充数字

XSLT:显示尾随零

格式化包含带前导零的小数点的数字