Xml XSLT中的浮点数乘法

Xml XSLT中的浮点数乘法,xml,xslt,rounding,multiplication,Xml,Xslt,Rounding,Multiplication,我想将节点中的浮点数乘以1000,结果必须映射到目标节点。这是我尝试过的XSLT代码 mnLineNumber * 1000 此处mnLineNumber节点是浮点数据类型,其值为1.0005。我预计结果是1005。但是,我得到的结果是 <ns0:szTarget>1004.9999999999999</ns0:szTarget>. 但是,我的问题是,如果我没有在xslt中使用round函数,为什么会得到一个浮点数?您说mnLineNumber节点是浮点数据类型,它的

我想将节点中的浮点数乘以1000,结果必须映射到目标节点。这是我尝试过的XSLT代码

mnLineNumber * 1000
此处mnLineNumber节点是浮点数据类型,其值为1.0005。我预计结果是1005。但是,我得到的结果是

<ns0:szTarget>1004.9999999999999</ns0:szTarget>.

但是,我的问题是,如果我没有在xslt中使用round函数,为什么会得到一个浮点数?

您说mnLineNumber节点是浮点数据类型,它的值为1.0005。但事实并非如此。该值不存在浮点(或双精度)数,因为在一般情况下,分数十进制值不能用二进制精确表示。(就像三分之一的分数不能用十进制精确表示一样。)因此,当您将字符串1.0005作为xs:double的词法表示形式写入时,您得到的xs:double数字实际上有一个类似于1.0004999999999的值。当您将数字乘以1000时,其实际值与“预期”值之间的差值将被放大


在XSLT2.0中,可以使用xs:decimal数据类型代替xs:double来解决这个问题。在XSLT1.0中,根据需要对答案进行四舍五入。

哪个XSLT处理器?
round(ns0:mnLineNumber * 1000.0).