在XSLT中乘以浮点数

时间:2015-02-09 01:00:05

标签: xml xslt rounding multiplication

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

mnLineNumber * 1000

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

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

然后,我使用了圆函数,得到了预期的结果。

round(ns0:mnLineNumber * 1000.0).

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

1 个答案:

答案 0 :(得分:0)

您说mnLineNumber节点是浮点数据类型,它的值为1.0005。但它并没有。该值没有浮点数(或双精度数),因为通常小数十进制值不能精确地用二进制表示。 (正如三分之一的分数无法用十进制精确表示。)因此,当你将字符串1.0005写为xs:double的词汇表示时,你得到的xs:double数字实际上具有类似于1.00049999999999999的值。当您将数字乘以1000时,它的实际值与&#34;之间的差值为&#34;价值变得放大了。

在XSLT 2.0中,您可以使用xs:decimal数据类型代替xs:double来解决此问题。在XSLT 1.0中,根据需要围绕答案。