[ 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

Reply via email to