在xsl中格式化科学数字表示

And*_*dez 3 format xslt numbers

我在XML -1.8959581529998104E-4中有以下值.我想将其格式化为应该使用XSL给出的确切数字-0.000189595815299981.

format-number(-1.8959581529998104E-4,'0.000000; -0.000000')给了我NaN.

有任何想法吗?

干杯

Andez

小智 15

XSLT 1.0不支持科学记数法.

这:number('-1.8959581529998104E-4') 结果:NaN

这:number('-0.000189595815299981') 结果:-0.000189595815299981

XSLT 2.0支持科学记数法

这:number('-1.8959581529998104E-4') 结果:-0.000189595815299981

编辑:一个非常简单的XSLT 1.0解决方法:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="number[substring-after(.,'E')]">
        <xsl:variable name="vExponent" select="substring-after(.,'E')"/>
        <xsl:variable name="vMantissa" select="substring-before(.,'E')"/>
        <xsl:variable name="vFactor"
             select="substring('100000000000000000000000000000000000000000000',
                               1, substring($vExponent,2) + 1)"/>
        <xsl:choose>
            <xsl:when test="starts-with($vExponent,'-')">
                <xsl:value-of select="$vMantissa div $vFactor"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$vMantissa * $vFactor"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

有了这个输入:

<number>-1.8959581529998104E-4</number>
Run Code Online (Sandbox Code Playgroud)

输出:

-0.00018959581529998104
Run Code Online (Sandbox Code Playgroud)