[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Hi Jarno,
Thanks a lot for the information.
Well, it does work if the values of are of upto 2 decimal places.
But the problem is my stylesheet is a generic one and is being applied to
different XML files. The other XML may contain values upto 3 or 4 decimal places.
So I can't use a value of 100 for multiplication and division.
But your reply definately has given me an idea, how to achieve it.
I am planning to count the digits after decimal and then apply multiplication and
division accordingly.
Any other idea?
Arun
_________________________________________________________________
Searching for your soulmate? Zero in on the perfect choice. http://www.astroyogi.com/newmsn/astrodate/ Try MSN Astrodate now!
RE: [xsl] sum() function giving strange result
Subject: RE: [xsl] sum() function giving strange result From: "Arun Sinha" <arunsinha666@xxxxxxxxxxx> Date: Tue, 14 Dec 2004 06:54:42 +0000 |
Hi Jarno,
Thanks a lot for the information.
Well, it does work if the values of are of upto 2 decimal places.
But the problem is my stylesheet is a generic one and is being applied to
different XML files. The other XML may contain values upto 3 or 4 decimal places.
So I can't use a value of 100 for multiplication and division.
But your reply definately has given me an idea, how to achieve it.
I am planning to count the digits after decimal and then apply multiplication and
division accordingly.
Any other idea?
Arun
From: <Jarno.Elovirta@xxxxxxxxx> Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Subject: RE: [xsl] sum() function giving strange result Date: Tue, 14 Dec 2004 08:34:45 +0200
Hi,
> The sum funciton is giving some strange result. > > Xml :- > <documents> > <value>10.11</value> > <value>20.22</value> > <value>30.33</value> > <value>40.44</value> > <value>50.55</value> > <value>10.11</value> > <value>20.22</value> > </documents> > > XSL :- > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:exsl="urn:schemas-microsoft-com:xslt" > extension-element-prefixes="exsl"> > > <xsl:variable name="SubTotals"> > <xsl:for-each select="/documents/value"> > <value><xsl:value-of select="." /></value> > </xsl:for-each> > </xsl:variable> > > <xsl:template match="/"> > <xsl:apply-templates select="documents/value" /> > </xsl:template> > > <xsl:template match="value"> > <xsl:variable name="Position" select="position()" /> > <xsl:value-of > select="sum(exsl:node-set($SubTotals)/value[position() > < $Position])" /><br /> > </xsl:template> > > </xsl:stylesheet> > > > The result :- > 0 > 10.11 > 30.33 > 60.66 > 101.1 > 151.64999999999998 > 161.76 > > I am worried about the output 151.64999999999998. Why is it > outputting this > value?
Because XPath uses a floating-point numbers <http://www.w3.org/TR/xpath#numbers>.
> I am expecting to be upto 2 decimal places or 1 decimal places. > > Well I can mask it upto 2 decimal places but I do not have a > liberty to do > that.
How about
<xsl:variable name="SubTotals">
<xsl:for-each select="/documents/value">
<value>
<xsl:value-of select=". * 100" />
</value>
</xsl:for-each>
</xsl:variable>
...
<xsl:template match="value">
<xsl:variable name="Position" select="position()" />
<xsl:value-of select="sum(exsl:node-set($SubTotals)/value[position() < $Position]) div 100" />
<br />
</xsl:template>
Seems to give the expecter result.
0 10.11 30.33 60.66 101.1 151.65 161.76
Cheers,
Jarno
_________________________________________________________________
Searching for your soulmate? Zero in on the perfect choice. http://www.astroyogi.com/newmsn/astrodate/ Try MSN Astrodate now!
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] sum() function giving str, Jarno.Elovirta | Thread | RE: [xsl] sum() function giving str, Michael Kay |
RE: [xsl] sum() function giving str, Jarno.Elovirta | Date | RE: FW: [xsl] Siblings, Arun Sinha |
Month |