2016-05-11 4 views
-3

追加する値を操作しようとして次の例外があります。 はあなたの助けError NumberFormatException on Java

java.lang.NumberFormatException: Invalid double: "20,000" 
java.lang.StringToReal.invalidReal(StringToReal.java:63) 
java.lang.StringToReal.parseDouble(StringToReal.java:269) 
java.lang.Double.parseDouble(Double.java:295) 
java.lang.Double.valueOf(Double.java:332) 
+2

"20,000"のカンマは小数点区切り記号(値は20)、またはグループ区切り記号(そして値は2万)としますか? –

答えて

-1

あなたが数のセパレータとしてカンマを使用していないためにどうもありがとうございました。

20,000の代わりに20000を使用する必要があります。

EDIT:@MitchWeaverが述べたように

、また、あなたはStringを解析するNumberFormatを使用することができ、それ20_000

+1

にはアンダースコアを使用できます。たとえば、20_000を使用できます。 –

+0

@MitchWeaverああ、そうだよ。それを追加します。ありがとう! –

+0

カンマは、おそらく小数点区切り文字(US以外のロケールの場合)です。 –

3

作り、underescoreするカンマを置き換えることができます。何かのように、

String str = "20,000"; 
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("en_US")); 
NumberFormat nfIT = NumberFormat.getNumberInstance(Locale.ITALIAN); 
try { 
    System.out.println(nf.parse(str)); // <-- 20000 
    System.out.println(nfIT.parse(str)); // <-- 20 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

詳細については、Customizing Formats (The Java Tutorials)を参照してください。あなたの期待される出力に一致するように、適切なLocaleを渡すようにしてくださいビーイング

+1

これは適切なアプローチですが、ロケールはグループカンマではなくカンマが小数点区切り文字である可能性が高いことに注意してください。 –

+0

@TedHoppだから、私は 'Locale'を指定した例を与えました(OPが期待していることは不明です)。 –

+0

右。 '' 20,000 "'が解析に成功したロケール(たとえば、 'Locale.FRANCE'など)を選択した場合、答えがよかったと思います。 –