XPath 1.0 uses floating-point binary arithmetic, not decimal arithmetic,
so there will be rounding errors when results are converted to decimal.
Use format-number() to display the results to the required precision.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Jonas Nordström
Sent: 19 September 2002 13:03
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: [xsl] msxml sum() and precision problem
Something strange is going on. I strolled through the
archives but couldn't find something similar. Consider the following:
test.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<jonas>
<name amount="349.03"/>
<name amount="895.01"/>
<name amount="841.03"/>
</jonas>
test.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1" /> <head> </head> <body>
<xsl:apply-templates select="/jonas/name" /> <br/>
Sum: <xsl:value-of select="sum(/jonas/name/@amount)" />
</body>
</html>
</xsl:template>
<xsl:template match="/jonas/name">
<xsl:value-of select="position()"/>: <xsl:value-of
select="@amount" /><br/> </xsl:template>
</xsl:stylesheet>
and the stunning browser-result:
1: 349.03
2: 895.01
3: 841.03
Sum: 2085.0699999999997
Is there a known precision bug for sum in MSXML (I'm running
MSXML3 i think).
- Jonas Nordstrom -
Sigma Exallon AB
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list