2016-11-24 7 views
0
に、二重結果に指数番号の形式で文字列を変換

タスク:NumberFormatExceptionが

私は、データベースからの技術的なデータを取得し、二重の値を期待し、当社のデータベースにそれを置くためにそれを処理する必要があるのです。データベースからのエンティティはエレベーターであり、 "travel heigth、weigth、..:"のような技術データを持っています。

ソース-dbは、stringsの指数数値形式を使用します。つまり、 2.8300000000000000E+04です。私は、この文字列を取り、このようDoubleに変換

public Double getDoubleNumberFromJSONString(String inputValue) { 
     return Double.valueOf(inputValue); 
} 

出力:28.300(それは今、二重です)

問題:

のほとんどは時間は私のアプローチは動作しますが、ソースdbは指数関数の数値を出力しない場合がありますが、次のようなものがあります。

2,200.0 mm ...非指数関数の数値と単位。これはNumberFormatExceptionになります。

は、私は、ソース入力が実際に大きく変動することができるので、問題にアプローチする方法を知らない:

1.000 kg ... kg 1.000 ... mm 2,000 ... 350 ... 350.0 ... 350,0を..

データベースではダブルフォーマットの番号が必要なので、単純にソース番号を転送することはできません。

私のソリューション・アプローチ:

public Object getDoubleNumberFromJSONString(String inputValue) { 
    // FIXME Throws an error 
    if(Double.valueOf(inputValue) instanceof Double){ 
     return Double.valueOf(inputValue); 
    } 
    else{ 
     System.out.println("Had to return inputValue in DoubleNumber()! Crash?"); 
     return inputValue; 
    } 
} 

しかしDouble.valueOf(inputValue)はすでにNumberFormatExceptionをスローしますので、私はどのように知らない:

は、私は、文字列が実際にDoubleかもしれないかどうかを確認するためにinstanceofを使用しようとしましたこの状況に対処する。

質問:

どのように私はDoubleに正しく入力を解析することができますか?

+0

測定単位の保持にも興味がありますか? –

答えて

1

Julien Lopez' proposal in the commentsのおかげで、私はそれが期待どおりに動作するようになりました!だからここ

は、私が構築したソリューションです。

public Double getDoubleNumberFromJSONString(String inputValue) { 
    try { 
     return Double.valueOf(inputValue); 
    } catch (NumberFormatException e) { 
     Scanner sc = new Scanner(inputValue); 
     double value1 = sc.nextDouble(); 

     sc.close(); 
     return value1; 
    } 
} 

最初の方法は、二重に指数番号形式から入力文字列を変換しようとします。

これが失敗すると、NumberFormatExceptionがスローされます。

次に、スキャナを使用して文字列をスキャンして二重値を返し、それを返します。

解決策が私の質問に非常に当てはまるので、私はJulien Lopez提案の複製として私の質問を受け入れました。私は自分の疑問に答えました。

0

ASCIIコードを使用した文字列操作が考えられます。 文字列 - >フィルタ - あなたが新しいメモリをインスタンス化に関わる場合>ダブルに変換(中間文字列であるかもしれない)場合

//inside for loop: 
if(((int)character[i]>=48 && (int)character[i] <= 57)|| ((int)character[i]==46)) 
{ //get these elements to new character sequence maintaining the position. 
} //when coming out of this block it contains only numerical values. 

、リストのいずれかを使用して数値以外の値を削除するに取り組むことADTの

関連する問題