我如何知道字符串是不是是科学计数法中的数字?

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中如何把 科学记数法字符串 变为 数字字符串

C#科学计数字符串,如“7.1e-003”转换为decimal类型数据

excel中长数字字符串会默认变成科学计数法,如何去除?

Java中如何使用科学计数法

js小数字换算科学计数法