XSLT 1.0中的Sum diff问题/错误

Rir*_*iri 4 xslt floating-point

我有这个XML数据,并尝试使用下面的XSLT片段对它进行总结.

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

在我的世界中,该值应为0但最终为-0.0000000000005684341886080801

在Visual Studio中运行它并亲自查看.为什么?这是怎么回事?

Rub*_*ias 5

似乎你的XSLT处理器在求和之前将十进制数字串转换为浮点精度数;

好吧,你总是可以使用圆函数除以你想要的精度或使用格式数函数,如果可用的话:

<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>
Run Code Online (Sandbox Code Playgroud)