带有 EX、EEX、EXP 或 EE 科学记数法的字符串加倍
Posted
技术标签:
【中文标题】带有 EX、EEX、EXP 或 EE 科学记数法的字符串加倍【英文标题】:String with EX, EEX, EXP or EE scientific notation to double 【发布时间】:2019-03-27 14:26:19 【问题描述】:在我的代码中,我接收来自不同来源的字符串形式的数值。其中一个来源是向我发送这种值:
-6.535402781EX-05
经过几次测试,我知道Double.valueOf()
方法无法处理 EX 格式。 NumberFormatException
被抛出。
我想出了简单的解决方法:
String val = "-6.535402781EX-05".replace("X", "");
实际上它正在工作,但我不确定这是否是最佳解决方案。我还看到了 EEX、EE 和 EXP。问题:如何在这种边缘情况下保护我的代码?
【问题讨论】:
【参考方案1】:如果这些是唯一可能的值,您可能希望使用带有正则表达式的 replaceAll
而不是 replace
:
String[] val = "-6.535402781EX-05","-6.535402781EEX-05","-6.535402781EE-05","-6.535402781EXP-05";
for(String v :val)
System.out.println(v.replaceAll("[EXP]2,", "E"));
【讨论】:
您的解决方案似乎比@david 的解决方案更容易。我喜欢正则表达式,在这种情况下它是最小的。谢谢!【参考方案2】:一个简单的正则表达式对你有用吗?您可以先将不同的输入格式转换为您已知的可由Double.valueOf()
处理的输入格式。
String pattern = "(\\D?)(\\d+)(\\.?)(\\d+)(\\D+)(\\d+)";
List<String> inputs = Arrays.asList("-6.535402781EX-05",
"-6.535402781EXP-05",
"-6.535402781EE-05",
"-6.535402781E-05",
"6.535402781E-05",
"6.535402781",
"-6.535402781",
"6.5",
"6");
inputs.forEach((String in) -> System.out.println(in.replaceAll(pattern, "$1$2$3$4E-$6")));
我的示例中的输入应转换为以下内容,并且应该可以使用 Double.valueOf()
解析它们。
-6.535402781E-05
-6.535402781E-05
-6.535402781E-05
-6.535402781E-05
6.535402781E-05
6.535402781
-6.535402781
6.5
6
你应该小心为你想要支持的所有输入格式添加足够的单元测试用例。
【讨论】:
以上是关于带有 EX、EEX、EXP 或 EE 科学记数法的字符串加倍的主要内容,如果未能解决你的问题,请参考以下文章
Magento EE 1.9 的缓存:我们应该使用整页缓存(带有打孔)和/或“经典”块缓存吗?
如何强制 VSCode 的 Tailwind CSS IntelliSense 扩展与 .html.eex 和 .html.leex 文件一起使用?