Xslt 如何使用XSL将所有十进制数更改为零

Xslt 如何使用XSL将所有十进制数更改为零,xslt,Xslt,如何在XSL中将所有十进制值更改为零 示例值: 发件人:9876.123 致:9876.000 floor(9876.123) 返回: 9876 9876.000 以及: 返回: 9876 9876.000 我不明白为什么这会有用,但如果您确实想保留小数位数,我会使用: format-number(floor($amount), translate($amount, '123456789', '000000000')) 那么 返回: 9876 9876.000 以及: 返回:

如何在XSL中将所有十进制值更改为零

示例值:

发件人:9876.123

致:9876.000

floor(9876.123)
返回:

9876
9876.000
以及:

返回:

9876
9876.000

我不明白为什么这会有用,但如果您确实想保留小数位数,我会使用:

format-number(floor($amount), translate($amount, '123456789', '000000000'))
那么

返回:

9876
9876.000
以及:

返回:

9876
9876.000

我不明白为什么这会有用,但如果您确实想保留小数位数,我会使用:

format-number(floor($amount), translate($amount, '123456789', '000000000'))

如果小数点后的位数事先未知,请使用

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
这里是一个完整的XSLT转换示例

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000

更新

有人要求正确处理整数值(不包含小数点)(完整复制)

我还补充说,负值和/或货币面额也应正确处理

尽管这超出了当前问题的范围,但这里还是有一个XPath 1.0表达式,它生成了所需的结果:

concat(substring-before(concat(., '.'), '.'),
        translate(., '+-$0123456789', ''), 
        translate(substring-after(.,'.'), '123456789','000000000'))
这里又是一个完整的转换:

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000

如果小数点后的位数事先未知,请使用

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
这里是一个完整的XSLT转换示例

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000

更新

有人要求正确处理整数值(不包含小数点)(完整复制)

我还补充说,负值和/或货币面额也应正确处理

尽管这超出了当前问题的范围,但这里还是有一个XPath 1.0表达式,它生成了所需的结果:

concat(substring-before(concat(., '.'), '.'),
        translate(., '+-$0123456789', ''), 
        translate(substring-after(.,'.'), '123456789','000000000'))
这里又是一个完整的转换:

concat(substring-before(., '.'),
       '.', 
       translate(substring-after(., '.'), '123456789', '000000000'))
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
        "concat(substring-before(., '.'),
                '.', 
                translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="d">
    <xsl:value-of select=
    "concat(substring-before(concat(., '.'), '.'),
            translate(., '+-$0123456789', ''), 
            translate(substring-after(.,'.'), '123456789','000000000'))"/>
  </xsl:template>
</xsl:stylesheet>
<t>
   <d>-$1.234</d>
   <d>-1.234</d>
   <d>-.234</d>
   <d>9876</d>
   <d>9876.1</d>
   <d>9876.12</d>
   <d>9876.123</d>
   <d>9876.1234</d>
   <d>9876.12345</d>
   <d>9876.123456</d>
   <d>9876.1234567</d>
   <d>9876.12345678</d>
   <d>9876.123456789</d>
</t>
   -$1.000
   -1.000
   -.000
   9876
   9876.0
   9876.00
   9876.000
   9876.0000
   9876.00000
   9876.000000
   9876.0000000
   9876.00000000
   9876.000000000

这个例子模棱两可。最好用文字解释逻辑。同意@michael.hor257k,小数点右边有多少个位置?您是否总是希望0的数量与数字或数字的数量相同?或者实际上,您是在寻找floor()函数吗?您的意思是“小数点位”?@KevinBrown-填充的零取决于小数点位的字符,例如9876.987654321,然后是9876.000000000,请为混淆道歉示例不明确。最好用文字解释逻辑。同意@michael.hor257k,小数点右边有多少个位置?您是否总是希望0的数量与数字或数字的数量相同?或者实际上你是在寻找floor()函数吗?你的意思是“小数点位”?@KevinBrown-填充的零取决于小数点位的字符,例如9876.987654321然后9876.000000000,为混淆道歉是的,这是正确的!,谢谢,但是零取决于分贝的长度。我想我也满足了这个要求。是的,这是正确的!,谢谢,但是零取决于分贝的长度。我想我也满足了这个要求。谢谢,这非常有用。谢谢,这非常有用。