首页 > 解决方案 > 在 XSLT 2.0 中格式化包含前导零的小数点的数字

问题描述

我在用点打印十进制值(0)时遇到问题。根据要求,应打印前导(0)零:

XML:这里所有的百分比值都在 0.something 中。

<root>
    <rate final="280" percent="0.1921"/>
    <rate final="180" percent="0.18"/>
    <rate final="170" percent="0.17201"/>
    <rate final="70" percent="0.1"/>
</root>

XSLT:我将这个 XSLT 与 format-number 函数一起使用,因为我只需要点 (.) 后的两位数。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output indent="yes"/>

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

    <xsl:template match="rate">
        <rate>
            <xsl:apply-templates select="@*"/>
            <xsl:value-of select="concat('Final Percentage is : ', format-number(@percent, '#,###,###,###.00'),'%')"/>
        </rate>
    </xsl:template>

</xsl:stylesheet>

期望的输出:我想要的结果以 0 开头。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <rate final="280" percent="0.1921">Final Percentage is : 0.19%</rate>
    <rate final="180" percent="0.18">Final Percentage is : 0.18%</rate>
    <rate final="170" percent="0.17201">Final Percentage is : 0.17%</rate>
    <rate final="70" percent="0.1">Final Percentage is : 0.10%</rate>
</root>

当前输出:我使用 XSLT 得到的当前结果

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <rate final="280" percent="0.1921">Final Percentage is : .19%</rate>
    <rate final="180" percent="0.18">Final Percentage is : .18%</rate>
    <rate final="170" percent="0.17201">Final Percentage is : .17%</rate>
    <rate final="70" percent="0.1">Final Percentage is : .10%</rate>
</root>

标签: xmlxslt-2.0number-formatting

解决方案


Martin Honnen 在评论中回答:

将 format-number 调用的第二个参数更改为 0.00 以指示您需要前导零。


推荐阅读