Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sum diff problem/bug in XSLT 1.0

I have this XML data and try and make a sum of it using the XSLT snippet below.

Xml

<?xml version="1.0" encoding="utf-8"?>
<values>
    <value>159.14</value>
    <value>-2572.50</value>
    <value>-2572.50</value>
    <value>2572.50</value>
    <value>2572.50</value>
    <value>-159.14</value>
</values>

Xslt

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <xsl:value-of select="sum(values/value)"/>
</xsl:template>

</xsl:stylesheet>

In my world the value should then be 0 but it ends up being -0.0000000000005684341886080801

Run it in Visual Studio and see for yourself. Why? is this happening?

like image 273
Riri Avatar asked Feb 28 '23 23:02

Riri


2 Answers

Seems your XSLT processor convert decimal numbers strings to float-point precision numbers before sum;

Well, you can always to use round function and divide by your desired precision or to use format-number function, if available:

<xsl:template match="/">
    <xsl:value-of select="round(sum(values/value)) div 100"/><br />
    <xsl:value-of select="format-number(sum(values/value), '0.00')"/>
</xsl:template>
like image 173
Rubens Farias Avatar answered Mar 07 '23 23:03

Rubens Farias


Try this

<xsl:value-of select="format-number(sum(values/value),'0.00')"/>
like image 41
Mohamed Aseem Avatar answered Mar 08 '23 01:03

Mohamed Aseem