加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:14:17 所属栏目:百科 来源:网络整理
导读:我有这个字符串: 8.1161E-002 这个字符串实际上是一个计算的结果(不幸的是结果转换为字符串,我不能改变它). 那么我怎么能把这个String转换成像00.081这样的格式呢? 我正在看XPath参考,但我找不到例如format()函数.有没有办法在XPath中执行此操作? 解决方
我有这个字符串:

8.1161E-002

这个字符串实际上是一个计算的结果(不幸的是结果转换为字符串,我不能改变它).

那么我怎么能把这个String转换成像00.081这样的格式呢?

我正在看XPath参考,但我找不到例如format()函数.有没有办法在XPath中执行此操作?

解决方法

XPath 1.0解决方案

如果你坚持使用XPath 1.0并且你的输入是形式(尾数E指数)或(尾数E-指数)你可以使用这个hack(这不是很好但是完成工作):

translate(
     concat(
           number(substring('100000000000000',1,number(substring-after(/number,'E+'))+1))*number(substring-before(/number,'E+')),number(concat(substring('0.00000000000000','E-'))+1),'1'))*number(substring-before(/number,'E-')),number(substring('100000000000000','e+'))+1))*number(substring-before(/number,'e+')),'e-'))+1),'e-')),/number[not(contains(.,'E')) and not(contains(.,'e'))]
     ),'Na',''
)

它提取尾数(E或e之前的字符串),然后通过将一串零点移动由指数确定的位置数量来获得10的分数或幂,然后将其与尾数相乘.它分别处理正或负指数的情况.由于在XPath中没有if,它将两个结果连接成字符串,并允许其中一个产生’NaN,稍后将删除.

例如,如果指数为2,它将从第一个或第三个字符串中获得100个子字符串.如果它是5,它将获得10000,如果它是-3,它将从第二或第四个字符串中提取0.001子串.然后它会将该数字乘以尾数.

由于你要么有e或e-,其中一个将是字符串NaN,然后??使用translate函数从最终字符串中删除它(它删除所有N和一个字符,它们从不以十进制数字或科学记数法出现).最后的concat论证涉及数字不是科学记数法的情况.

e可以是大写或小写.

限制:

>如果你没有积极的指数,它将无法运作
>如果指数的绝对值大于15,它将显示不正确的结果.
>如果您有十六进制值,它也将失败(因为任何a将从最终结果中删除).

将其应用于此文件:

<number>2.34</number>

它将正常读取为:

2.34

但2.34e 5将被读取为234000,2.34E-005将变为0.0000234.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读