将科学计数法的字符串转换为 XPath 中的数字格式

2024-02-01

我有这个字符串:

8.1161E-002

这个字符串实际上是计算的结果(不幸的是结果被转换为字符串并且我无法更改它)。

那么我怎样才能将这个字符串转换为类似的格式00.081?

我正在查看 XPath 参考,但找不到format()例如函数。有没有办法在 XPath 中做到这一点?


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可以是大写或小写。

限制:

  1. It won't如果你有正指数就可以工作without the +
  2. 如果指数的绝对值大于 15,则会显示错误的结果。
  3. 如果您有十六进制值,它也会失败(因为任何a将从最终结果中删除)。

将其应用到该文件:

<number>2.34</number>

它通常读作:

2.34

But 2.34e+5将被读作234000 and 2.34E-005会变成0.0000234.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将科学计数法的字符串转换为 XPath 中的数字格式 的相关文章

随机推荐