2015-02-09 58 views
0

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

mnLineNumber * 1000 

这里mnLineNumber节点是float数据类型,它的值是1.0005。我期望的结果为1005。但是,我得到的结果作为

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

然后,我已经使用了功能全面,我得到了预期的结果。

round(ns0:mnLineNumber * 1000.0). 

但是,我的问题是为什么我得到一个浮动的数字,如果我不使用循环函数在xslt?

+0

哪个XSLT处理器? – 2015-02-09 01:11:15

回答

0

你说mnLineNumber节点是float数据类型,它的值是1.0005。但事实并非如此。该值没有浮点数(或双精度数),因为通常小数小数值不能用二进制精确表示。 (就像小数点三分之一不能精确地用十进制表示)所以,当你将字符串1.0005作为xs:double的词汇表示时,你得到的xs:double数字实际上有一个类似于1.00049999999999999的值。当您将数字乘以1000时,其实际值与“预期”值之间的差异将变大。

在XSLT 2.0中,您可以通过使用xs:decimal数据类型来代替xs:double来获得此信息。在XSLT 1.0中,根据需要绕过答案。