2016-12-21 6 views
0

StringDoubleが含まれていないかどうかを確認したいのですが、Integerではありません。私はこのように働いています。Javaで有効なdoubleを確認する

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

Scanner(String)を使用し、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; 
} 
関連する問題