RE: [xsl] format decimal numbers issue

Subject: RE: [xsl] format decimal numbers issue
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sat, 22 Mar 2008 15:53:19 -0000
> <xsl:variable name="tput">
>       <xsl:call-template name="display-dec-sec">
>                <xsl:with-param name="value" select="$count 
> div $timeSpan * 1000" />
>       </xsl:call-template>
>  </xsl:variable>

So you call display-dec-sec supplying a number, and you get back a string
representation such as "5.894 s"
> 
> <td>
>        <xsl:call-template name="display-dec-sec">
>                <xsl:with-param name="value" select="$tput" />
>        </xsl:call-template>
> </td>

Now you're calling display-dec-sec again, only this time you don't supply a
number, you supply a string like "5.894 s".
> 
> <xsl:template name="display-dec-sec">
>      <xsl:param name="value" />
>              <xsl:value-of 
> select="format-number($value,'#,.000 s')" />
>      </xsl:template>
> 
> [xslt] C:\detail.xsl:153: Fatal Error! Cannot convert string "5.894 s"
> to a double

format-number will try to convert the supplied value to a number before
formatting it. But it can't convert "5.894 s" to a number because it is
already formatted.

Note: the " s" in the picture is in fact legal. I'm less sure about the
adjacent "," and ".". It's definitely NOT allowed in XSLT 2.0: "A
sub-picture must not contain a grouping-separator-sign adjacent to a
decimal-separator-sign.". In 1.0, it's defined by reference to the JDK 1.1
specification, and there's no copy of that available online any more.

Michael Kay
http://www.saxonica.com/

Current Thread