xmlxslttimecodes

XSL Convert Scientific notation to number


I'm using XSL 2.0. I have the following $intTOTAL which I'm converting to milliseconds. But the output of this is in scentific notation. How do i convert this to a normal number without scientific notation

<xsl:variable name="intTotal" select="((number($timeINTSEC)*60)*1000 + number($timeINTMSEC))"/>
<TEST><xsl:value-of select="number($intTotal)"/></TEST>

Here is the output i'm getting

 <TEST>1.14E6</TEST>

Solution

  • Expanding Martin's comment, the number() function converts to an xs:double, and the default output format for xs:double is scientific notation for values outside the range 1e-6 to 1e6.

    You could either do the arithmetic in xs:decimal instead of xs:double, by using the xs:decimal() function in place of number(), or you could override the way xs:double values are formatted by using the format-number() function.

    Incidentally the call to number() in number($intTotal) is redundant because the value is already an xs:double. And it's always a good idea to declare the types of your variables with an as attribute so it's clear to the reader what's going on.