当前位置:  开发笔记 > 编程语言 > 正文

明智地解析科学记数法?

如何解决《明智地解析科学记数法?》经验,为你挑选了1个好方法。

我希望能够编写一个函数,它以科学记数法形式接收一个数字作为字符串,并将系数和指数分开作为单独的项目.我可以使用正则表达式,但传入的数字可能不会被标准化,我更愿意能够规范化然后打破这些部分.

一位同事已经使用VB6获得了解决方案的一部分,但它并不完全存在,如下面的成绩单所示.

cliVe> a = 1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 10 exponent: 5 

应该是1和6

cliVe> a = 1.1e6
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.1 exponent: 6

正确

cliVe> a = 123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

正确

cliVe> a = -123345.6e-7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: -2

应该是-1.233456和-2

cliVe> a = -123345.6e+7
cliVe> ? "coeff: " & o.spt(a) & " exponent: " & o.ept(a)
coeff: 1.233456 exponent: 12

正确

有任何想法吗?顺便说一句,Clive是一个基于VBScript的CLI,可以在我的博客上找到.



1> Jason S..:

谷歌在"科学记谱法正则表达式"中显示了一些匹配,包括这一个(不要使用!!!!)使用

*** warning: questionable ***
/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/

其中包括-.5e7和+ 00000e33等情况(两者都可能不允许).

相反,我强烈建议您使用Doug Crockford的JSON网站上的语法,该网站明确记录了JSON中数字的构成.这是从该页面获取的相应语法图:

alt text http://www.json.org/number.gif

如果你查看他的json2.js脚本的第456行(在javascript中安全地转换为JSON),你会看到正则表达式的这一部分:

/-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/

具有讽刺意味的是,它与他的语法图不符....(看起来我应该提交一个bug)我相信实现该语法图的正则表达式是这样的:

/-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/

如果你想允许一个初始+,你会得到:

/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/

根据自己的喜好添加捕获括号.

我还强烈建议您充实一堆测试用例,以确保包含您想要包含(或不包括)的可能性,例如:

allowed:
+3
3.2e23
-4.70e+9
-.2E-4
-7.6603

not allowed:
+0003   (leading zeros)
37.e88  (dot before the e)

祝好运!

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有