XPath 1.0 解决方案
如果你被困住了XPath 1.0您的输入格式为 (mantissa E+ exponent) or (mantissa E- exponent)你可以用这个hack(这不是很好,但完成了工作):
translate(
concat(
number(substring('100000000000000',1,number(substring-after(/number,'E+'))+1))*number(substring-before(/number,'E+')),
number(concat(substring('0.00000000000000',1,number(substring-after(/number,'E-'))+1),'1'))*number(substring-before(/number,'E-')),
number(substring('100000000000000',1,number(substring-after(/number,'e+'))+1))*number(substring-before(/number,'e+')),
number(concat(substring('0.00000000000000',1,number(substring-after(/number,'e-'))+1),'1'))*number(substring-before(/number,'e-')),
/number[not(contains(.,'E')) and not(contains(.,'e'))]
), 'Na', ''
)
它提取mantissa(之前的字符串E
or e
),然后通过将一串零移位 的量来获得 10 的分数或幂职位决定于exponent,然后将其与mantissa。它分别处理正指数或负指数的情况。既然没有if在 XPath 中,它将两个结果连接为字符串,并允许其中之一生成 'NaN,稍后将其删除。
例如,如果exponent is +2
它将得到100
第一个或第三个字符串的子字符串。如果是+5
它会得到10000
如果是的话-3
它将提取0.001
第二个或第四个字符串的子字符串。然后它将将该数字乘以mantissa.
因为你要么有e+
or e-
,其中之一将是字符串NaN
然后使用以下命令从最终字符串中删除translate
函数(它删除所有N
and a
字符,绝不会出现在十进制数字或科学记数法中)。最后concat
参数处理数字是的情况not以科学记数法表示。
The e可以是大写或小写。
限制:
- It won't如果你有正指数就可以工作without the
+
- 如果指数的绝对值大于 15,则会显示错误的结果。
- 如果您有十六进制值,它也会失败(因为任何
a
将从最终结果中删除)。
将其应用到该文件:
<number>2.34</number>
它通常读作:
2.34
But 2.34e+5
将被读作234000
and 2.34E-005
会变成0.0000234
.