检查Java中的有效双精度

时间:2016-12-21 09:55:23

标签: java

我想检查String是否包含Double而不是Integer。我正在以这种方式工作;

 private boolean isDouble(String str) {
        try {
            Double.parseDouble(str);
            return true;
        }
        catch(NumberFormatException e) {
            return false;
        }

    } 

为了检查它,我只是通过了;

isDouble("123");

但它不起作用,在两种条件下都给出true(" 123"," 123.99")。这有什么不对?

5 个答案:

答案 0 :(得分:3)

如果你想检查它是否是一个不适合整数的数字,你可以对双重进行舍入。例如。利用round(1.2) != 1.2round(1) == 1

这一事实
private boolean isDouble(String str) {
    try {
        // check if it can be parsed as any double
        double x = Double.parseDouble(str);
        // check if the double can be converted without loss to an int
        if (x == (int) x)
            // if yes, this is an int, thus return false
            return false;
        // otherwise, this cannot be converted to an int (e.g. "1.2")
        return true;
        // short version: return x != (int) x;
    }
    catch(NumberFormatException e) {
        return false;
    }

} 

答案 1 :(得分:0)

您可以使用Scanner(String)并使用hasNextDouble()方法。来自它的javadoc:

如果使用nextDouble()方法可以将此扫描器输入中的下一个标记解释为double值,则返回true。 例如:

if(source.contains(".")){
    Scanner scanner = new Scanner(source);
    boolean isDouble = scanner.hasNextDouble();
    return isDouble;
}
return false;

答案 2 :(得分:0)

您也可以先解析为double,然后测试double是否为int

private void main() {

    String str = "123";

    Double value = parseDouble(str);
    boolean isInt = isInt(value);
}

private void isInt(Double value) {
    if(value != null) {
        return (value == (int) value) ? true : false;
    }
    return false;
} 

private double parseToDouble(String str) {
    Double value = null;
    try {
        value = Double.parseDouble(str);
    }
    catch(NumberFormatException e) {
        // Do something
    }
    return value;
}

答案 3 :(得分:0)

问题是由于 1.00为1并且它是双。 这意味着您无法简单地解析double并假装代码检测到自身是否为int。为此你应该添加一个支票,我认为最简单的是:

private boolean isDouble(String str) {
  try {
    double myDouble = Double.parseDouble(str); 
    myDouble -= (int)myDouble; //this way you are making the (for example) 10.3 = 0.3

    return myDouble != (double)0.00; //this way you check if the result is not zero. if it's zero it was an integer, elseway it was a double
  }
  catch(NumberFormatException e) {
    return false;
  }
} 

我是在没有编辑的情况下完成的,所以请告诉我是否有问题。

希望这有帮助

答案 4 :(得分:0)

检查简单代码

private boolean isDecimalPresent(d){
 try {
    return d%1!=0;
}
catch(NumberFormatException e) {
    return false;
}