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

Rod*_*ers 7 xslt precision xpath

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

<CLD>
    <UCRV>
        <UCR1>.07</UCR1>
    </UCRV>
</CLD>
Run Code Online (Sandbox Code Playgroud)

在一个XSLT文件中,我选择的值为便士(或似乎100便士,我不知道为什么,但它是客户想要的!)如下:

<xsl:value-of select="./s0:CLD/s0:UCRV/s0:UCR1/text() * 100 * 100"/>
Run Code Online (Sandbox Code Playgroud)

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

谢谢

ggP*_*eti 5

浮点数不能精确地表示所有内容.由于数字以二进制形式存储,因此有时以二进制形式显示易于编写的数字实际上只能以二进制形式进行处理.这是0.07的情况,它在内部存储为0.070000000000000011,就像你的情况一样.根据经验,您永远不应该信任浮点值,以便直接比较它们而不进行舍入.