我如何知道字符串是不是是科学计数法中的数字?
Posted
技术标签:
【中文标题】我如何知道字符串是不是是科学计数法中的数字?【英文标题】:How do I know if a String is a number in scientific notation?我如何知道字符串是否是科学计数法中的数字? 【发布时间】:2013-06-06 22:52:48 【问题描述】:我知道如何检查字符串是否为数字。但是如何检查字符串是否为数字且字符串是否为科学计数法?
这是我尝试过的:我编写了一个算法来简单地检查字符串是否包含“E”,但我不确定这是否足够。
我正在寻找这样的方法实现:
public boolean isScientificNotation(String numberString)
//show me the implementation
【问题讨论】:
【参考方案1】:您可以使用BigDecimal
。符号格式本身的验证是使用简单的contains
表达式完成的
static boolean isScientificNotation(String numberString)
// Validate number
try
new BigDecimal(numberString);
catch (NumberFormatException e)
return false;
// Check for scientific notation
return numberString.toUpperCase().contains("E");
【讨论】:
对于像 1113E 或 1343e3 这样的字符串,实际上任何字符串都只有一个“e”或“E”。无法识别正确性。它应该是一个普通的字符串,但会以 ScientificNotation 的形式返回。【参考方案2】:试试这个:
if(containsE(str)) //call your method to check if "e" is present
try
Double.parseDouble(str);
return true;
catch(NumberFormatException e)
return false;
else
return false;
【讨论】:
只是为了确定,containsE
的含义是什么?你在做str.contains("E");
吗?我有点担心,因为您在评论中写信检查“e”。我的测试总是显示大写的 E 是有效的。
@tieTYT 当我说containsE(str)
时,我指的是你说你在问题中写的算法。
@tieTYT 您可以在字符串上执行toUpperCase()
,然后检查E
。
代码片段的开头可能只是if (!containsE(str)) return false;
我的问题是询问containsE
的实现。我知道这是微不足道的,但如果你告诉我那个 impl 并且它是正确的,我会把你的标记为答案。【参考方案3】:
private boolean isScientificNotation(String numberString)
// Validate number
try
new BigDecimal(numberString);
catch (NumberFormatException e)
return false;
// Check for scientific notation
return numberString.toUpperCase().contains("E") && (numberString.charAt(1)=='.' || numberString.charAt(2)=='.');
稍作修改。如果字符串是规范化的科学记数法,它应该有一个点/“。”排在第二位,并且在某个地方也有 E/e。
【讨论】:
负数怎么办?以上是关于我如何知道字符串是不是是科学计数法中的数字?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server中如何把 科学记数法字符串 变为 数字字符串