parseDouble in Java results to NumberFormatException

nikos picture nikos · Nov 27, 2011 · Viewed 56.9k times · Source

I am trying to load info from a properties file and i have the following code:

anInt = Integer.parseInt(prop.getProperty("anInt"));
aDouble = Double.parseDouble(prop.getProperty("aDouble"));

and while the first line works just fine, the second one where i am trying to load a double variable throws a NumberFormatException. The specific exception message is:

Exception in thread "main" java.lang.NumberFormatException: For input string: "78,5"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Double.parseDouble(Double.java:510)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:59)
at Assignment1.BaseStation.main(BaseStation.java:83)

Answer

Malcolm picture Malcolm · Nov 27, 2011

You have to use a period as a delimiter, not comma if you want to parse using Double.parseDouble(). It says in documentation for the Double class that

FloatingPointLiteral ... [is] as defined in the lexical structure sections of the of the Java Language Specification.

From Java Language Specification:

FloatingPointLiteral:

  • Digits . Digits opt ExponentPart opt FloatTypeSuffix opt
  • . Digits ExponentPart opt FloatTypeSuffix opt
  • Digits ExponentPart FloatTypeSuffix opt
  • Digits ExponentPart opt FloatTypeSuffix

If you want to take locale into consideration, you can use java.text.NumberFormat:

NumberFormat nf = NumberFormat.getInstance();
double number = nf.parse(myString).doubleValue();