2016-12-21 76 views
0

我想檢查String是否包含Double而不是Integer。我正在這樣工作;檢查Java中的有效雙精度

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

    } 

對於檢查它,我只是通過;

isDouble("123"); 

但它不工作,在兩個條件給予true( 「123」, 「123.99」)。這裏有什麼問題?

+2

從技術上講,123也是雙。 –

回答

3

如果要檢查它是一個數字,不適合在整數,你可能會舍的兩倍。例如。利用事實round(1.2) != 1.2,但round(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; 
    } 

} 
+0

你能打破這種說法嗎? 'return x!=(int)Math.round(x);'新手無法理解。 :) – user6750923

+0

'return E;'返回表達式* E *的值。在這種情況下,* E *是一個布爾條件'x!=(int)x'。實際上,這一輪可以被放棄。更新了我的答案。 –

0

您可以使用掃描儀(字符串)並使用hasNextDouble()方法。來自javadoc:

如果使用nextDouble()方法將此掃描器輸入中的下一個標記解釋爲double值,則返回true。 例如:

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

補充條件 – NehaK

0

您也可以隨時通過解析到double開始,然後測試,如果doubleint與否。

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; 
} 
+0

爲什麼你不檢查平等?這可以除以零。 –

+0

@MartinNyolt你是對的,我的壞。 – Aidin

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; 
    } 
} 

我做到了沒有編輯,所以告訴我,如果事情是錯的。

希望這有助於

0

檢查簡單的代碼

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