xslt - XPath 输出 .07 * 100 * 100 作为 700.00000000000011 为什么?

标签 xslt xpath precision

我注意到了一些我无法理解的奇怪的精确行为,我有一些 XML:

<CLD>
    <UCRV>
        <UCR1>.07</UCR1>
    </UCRV>
</CLD>

在 XSLT 文件中,我将值选择为便士(或看起来是 100 便士,我不知道为什么,但这是客户想要的!)为:
<xsl:value-of select="./s0:CLD/s0:UCRV/s0:UCR1/text() * 100 * 100"/>

但这是输出为 700.00000000000011 数据类型为 xsd:Decimal。这里有一些默认的精度吗?我可以简单地将数字四舍五入,但我只是想更好地理解它。

谢谢

最佳答案

浮点数不能精确地代表一切。由于数字以二进制形式存储,因此看起来很容易用十进制编写的数字有时实际上只能用二进制来处理。 0.07 就是这种情况,它在内部存储为 0.070000000000000011,就像您的情况一样。根据经验,您永远不应该相信浮点值,以便在不舍入的情况下直接比较它们。

关于xslt - XPath 输出 .07 * 100 * 100 作为 700.00000000000011 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475564/

相关文章:

xml - 如何在出现一定的字符串分隔符后获取字符串?

python - 使用xpath中的Starts with和ends函数查找selenium元素

floating-point - 为什么我看到一个 double 变量初始化为某个值,如 21.4 为 21.399999618530273?

python - 训练模型并有利于查全率/查准率的最佳方法是什么?

php - xslt 1.0 base64 编码模板的内容

javascript - 动态生成的表格内容(使用 XSLT)中包含单引号 ('),并且 JavaScript 会抛出未捕获的语法错误

java - XSLT 调用嵌入了 XML 的 java

javascript - 如何将 xsl 变量作为参数传递给脚本标记内的 javascript 函数?

c# - 以字符串结尾的属性值的 XPath?

java - 使用数值方法进行计算时 float 不准确