[ Sorry for the delay. ]
On Sat, 27 Nov 2010, Ivan Maidanski wrote:
Sorry for the provided test below - it doesn't test the things that are fixed
by the attached patch. In fact, the test is for a bug that has been already
fixed since Classpath v0.93 (by not relying on setMaximumIntegerDigits
implementation). So, the correct test is:
import java.text.*;
import java.util.*;
public class DecimalFormatTest {
public static void main(String[] args) throws ParseException {
NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
numberFormat.setGroupingUsed (false);
numberFormat.setParseIntegerOnly (true);
numberFormat.setMaximumFractionDigits (0);
int fmt_count = 2;
numberFormat.setMinimumIntegerDigits(fmt_count);
numberFormat.setMaximumIntegerDigits(fmt_count);
System.out.println(numberFormat.parse("1234567890")); // should print "12"
}
}
It tests the following code change (by the attached patch) in
DecimalFormat.parse():
int stop = start + this.maximumIntegerDigits + maximumFractionDigits + 2;
if (useExponentialNotation)
stop += minExponentDigits + 1;
->
int stop = start + maximumIntegerDigits;
if (maximumFractionDigits > 0)
stop += maximumFractionDigits + 1;
if (useExponentialNotation)
stop += (minExponentDigits > 0 ? minExponentDigits : 1) + 2;
Note, however, that the test does not print the expected "12" on Sun JRE 6.
I'm not able to reproduce the desired behavior with Sun JRE:
$ ../Downloads/jdk1.6.0_22/bin/java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
$ ../Downloads/jdk1.6.0_22/bin/java DecimalFormatTest
1234567890
Pekka