XSLT1.0中的和差问题/错误
我有这些XML数据,并尝试使用下面的XSLT代码段对其进行汇总 XmlXSLT1.0中的和差问题/错误,xslt,floating-point,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&g
<?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>
159.14
-2572.50
-2572.50
2572.50
2572.50
-159.14
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>
在我的世界里,值应该是0,但最终值是-0.000000000000568434188608081
在VisualStudio中运行它并亲自查看为什么?会发生这种情况吗?增加一轮怎么样
round(sum(values/value))
似乎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>
试试这个
<xsl:value-of select="format-number(sum(values/value),'0.00')"/>
为了给下面给出的解决方案增加一点完整性,并回答您的“为什么?”问题,请查看“每个计算机科学家都应该知道的浮点算术知识”,上面发表了相同的评论,但这里也有类似的评论。为了给下面给出的解决方案增加一点完整性,并回答您的“为什么?”问题,请查看“每一位计算机科学家都应该知道关于浮点运算的知识”@Riri:如果您对这种行为感到惊讶,我认为:并且公认答案中的链接页值得一读。