-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
7, 8, 9
-
generic
-
generic
FULL PRODUCT VERSION :
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
Finland and several other countries separate thousands groups with a space. I am getting a NumberFormatException parsing a String to a double in a Finnish locale.
A Finnish string can look like this: "12 345 678,999"
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Set your locale to Finnish, Finland
2. Try to parse or format a Finnish String to a double.
I have tried the following:
Locale finnish = new Locale("fi", "FI");
Locale.setDefault(finnish);
NumberFormat numFmNi = NumberFormat.getNumberInstance(finnish);
NumberFormat numFm = NumberFormat.getInstance(finnish);
DecimalFormat decFmNi = (DecimalFormat)numFmNi;
DecimalFormat decFm = (DecimalFormat)numFm;
decFmNi.applyPattern("#.##");
decFm.applyPattern("#.##");
Number numberFmNi2 = decFmNi.parse("9 123,45"); // no, result = 9
Number numberFmNi3 = numFmNi.parse("9 123,45"); // no, result = 9
Number numberFm2 = decFm.parse("9 123,45"); // no, result = 9
Number numberFm3 = numFm.parse("9 123,45"); // no, result = 9
double dNumberFmNi2 = numberFmNi2.doubleValue( );
double dNumberFmNi3 = numberFmNi3.doubleValue( );
double dNumberFm2 = numberFm2.doubleValue( );
double dNumberFm3 = numberFm3.doubleValue( );
//Number number1 = numFm.parse(numFm.format("9 123,45")); // no, get exception
//Number number1 = numFmNi.parse(decFmNi.format("9 123,456"));// no, get exception
//Number number1 = numFm.parse(decFm.format("9 123,456")); // no, get exception
//double d10 = Double.parseDouble("9 123,45"); // NumberFormatException
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect to get a valid double = 9123.45
ACTUAL -
From Sysout -
dNumberFmNi2 = 9.0
dNumberFmNi3 = 9.0
dNumberFm2 = 9.0
dNumberFm3 = 9.0
ERROR MESSAGES/STACK TRACES THAT OCCUR :
this line: double d10 = Double.parseDouble("9 123,45");
Produces this exception: java.lang.NumberFormatException: For input string: "9 123,45"
this line: Number number1 = numFm.parse(numFm.format("9 123,45"));
Produces this exception: java.lang.IllegalArgumentException: Cannot format given Object as a Number
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
Locale finnish = new Locale("fi", "FI");
Locale.setDefault(finnish);
NumberFormat numFmNi = NumberFormat.getNumberInstance(finnish);
DecimalFormat decFmNi = (DecimalFormat)numFmNi;
decFmNi.applyPattern("#.##");
try {
//
// These will cause an exception
//
//Number number1 = numFm.parse(numFm.format("9 123,45")); // exception
//Number number1 = numFmNi.parse(decFmNi.format("9 123,456"));// exception
//Number number1 = numFm.parse(decFm.format("9 123,456")); // exception
//double d10 = Double.parseDouble("9 123,45"); // NumberFormatException
//
// These don't cause an exception, but the result is not correct
//
Number numberFmNi2 = decFmNi.parse("9 123,45"); // no, result = 9
Number numberFmNi3 = numFmNi.parse("9 123,45"); // no, result = 9
double dNumberFmNi2 = numberFmNi2.doubleValue( );
double dNumberFmNi3 = numberFmNi3.doubleValue( );
System.out.println( "dNumberFmNi2 = " + numberFmNi2.doubleValue( ) );
System.out.println( "dNumberFmNi3 = " + numberFmNi3.doubleValue( ) );
} catch (Exception ex) {
ex.printStackTrace();
}
---------- END SOURCE ----------
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]
A DESCRIPTION OF THE PROBLEM :
Finland and several other countries separate thousands groups with a space. I am getting a NumberFormatException parsing a String to a double in a Finnish locale.
A Finnish string can look like this: "12 345 678,999"
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Set your locale to Finnish, Finland
2. Try to parse or format a Finnish String to a double.
I have tried the following:
Locale finnish = new Locale("fi", "FI");
Locale.setDefault(finnish);
NumberFormat numFmNi = NumberFormat.getNumberInstance(finnish);
NumberFormat numFm = NumberFormat.getInstance(finnish);
DecimalFormat decFmNi = (DecimalFormat)numFmNi;
DecimalFormat decFm = (DecimalFormat)numFm;
decFmNi.applyPattern("#.##");
decFm.applyPattern("#.##");
Number numberFmNi2 = decFmNi.parse("9 123,45"); // no, result = 9
Number numberFmNi3 = numFmNi.parse("9 123,45"); // no, result = 9
Number numberFm2 = decFm.parse("9 123,45"); // no, result = 9
Number numberFm3 = numFm.parse("9 123,45"); // no, result = 9
double dNumberFmNi2 = numberFmNi2.doubleValue( );
double dNumberFmNi3 = numberFmNi3.doubleValue( );
double dNumberFm2 = numberFm2.doubleValue( );
double dNumberFm3 = numberFm3.doubleValue( );
//Number number1 = numFm.parse(numFm.format("9 123,45")); // no, get exception
//Number number1 = numFmNi.parse(decFmNi.format("9 123,456"));// no, get exception
//Number number1 = numFm.parse(decFm.format("9 123,456")); // no, get exception
//double d10 = Double.parseDouble("9 123,45"); // NumberFormatException
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
I expect to get a valid double = 9123.45
ACTUAL -
From Sysout -
dNumberFmNi2 = 9.0
dNumberFmNi3 = 9.0
dNumberFm2 = 9.0
dNumberFm3 = 9.0
ERROR MESSAGES/STACK TRACES THAT OCCUR :
this line: double d10 = Double.parseDouble("9 123,45");
Produces this exception: java.lang.NumberFormatException: For input string: "9 123,45"
this line: Number number1 = numFm.parse(numFm.format("9 123,45"));
Produces this exception: java.lang.IllegalArgumentException: Cannot format given Object as a Number
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
Locale finnish = new Locale("fi", "FI");
Locale.setDefault(finnish);
NumberFormat numFmNi = NumberFormat.getNumberInstance(finnish);
DecimalFormat decFmNi = (DecimalFormat)numFmNi;
decFmNi.applyPattern("#.##");
try {
//
// These will cause an exception
//
//Number number1 = numFm.parse(numFm.format("9 123,45")); // exception
//Number number1 = numFmNi.parse(decFmNi.format("9 123,456"));// exception
//Number number1 = numFm.parse(decFm.format("9 123,456")); // exception
//double d10 = Double.parseDouble("9 123,45"); // NumberFormatException
//
// These don't cause an exception, but the result is not correct
//
Number numberFmNi2 = decFmNi.parse("9 123,45"); // no, result = 9
Number numberFmNi3 = numFmNi.parse("9 123,45"); // no, result = 9
double dNumberFmNi2 = numberFmNi2.doubleValue( );
double dNumberFmNi3 = numberFmNi3.doubleValue( );
System.out.println( "dNumberFmNi2 = " + numberFmNi2.doubleValue( ) );
System.out.println( "dNumberFmNi3 = " + numberFmNi3.doubleValue( ) );
} catch (Exception ex) {
ex.printStackTrace();
}
---------- END SOURCE ----------
- duplicates
-
JDK-4510618 [Fmt-Nu] French thousands separator is non-breaking space
-
- Closed
-