2016-12-11 5 views
3

Stringから結果を0.054563にして、doubleとして解析したいとします。私の現在の試みは2つの10進数の文字列を追加して二重に解析する

String number1 = "54,563"; 
String number2 = "54,563"; 

String value = "0.0" + number1; 
String value2 = "0.0" + number2; 

Double rd1 = Double.parseDouble(value.replaceAll(",",".")); 
Double rd3 = Double.parseDouble(value2.replaceAll(",",".")); 
System.out.println(rd1); 

、のように見える私はそれを実行したときしかし、私は次のエラーを取得する:

Exception in thread "main" java.lang.NumberFormatException: multiple points

+0

あなたは正確に何をしようとしていますか?数字を解析して1e6で除算したいだけですか?なぜ文字列を使って数値操作をしていますか?それは決してうまくいくことはありません。 –

+0

[NumberFormatExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/39849984/what-is-a-numberformatexception-and-how-can-i-fix-it) – xenteros

答えて

3

正規表現を使用すると、すべての非数字を削除できます。 \Dのパターンは、数字と一致しません。これを複数回実行する必要がある場合は、Patternを使用する方が高速です。あなたは一度だけそれを行う必要があるのであれば、あなたは、

String number1 = "54,563"; 
Pattern p = Pattern.compile("\\D"); 
Matcher m = p.matcher(number1); 
String number2 = "0.0" + m.replaceAll(""); 
System.out.println(Double.parseDouble(number2)); 

またはをのような何かを行うことができ、あなたの希望どちらも出力の

String number1 = "54,563"; 
String number2 = "0.0" + number1.replaceAll("\\D", ""); 
System.out.println(Double.parseDouble(number2)); 

のようなインラインそれを行うこと

0.054563

0

うん、それが可能です。最初にnumber1を文字列に変更してから+そのことをしなければなりません。

String value = "0.0" + Integer.toString(number1); 
+0

両方が文字列ですnumber1はすでに文字列であり、すでにここではdoubleになっています。Double rd1 = Double.parseDouble(value.replaceAll( "、"、 "。")); –

+0

ああ、私は今理解しています。 –

+1

明白なことは、54563を整数にしてから1000000で割り切れるのはなぜですか? –

4

valueは「0.054,563」だろうと一つだけの期間が0.1などのリテラルdoubleに許可されているので、あなたは、例外を取得。あなたのコードvalue.replaceAll(",",".")は値を0.054.563に変更するだけです。これは2つのピリオドのために依然として違法です。

String value = "0.0" + number1.replaceAll(",", ""); 

などの前に続いてカンマを削除するには、追加の replaceAll(...)なし Double rd1 = Double.parseDouble(value)を使用することができます。

これらが不要とかなり高価操作しているので、私はさらに強く、Stringの変換と解析を通じて、数学的にではなく、変換を行うことをお勧め。

関連する問題