Hello core-libs-dev. I am currently investigating the issues regarding the following bug:

   http://monaco.sfbay.sun.com/detail.jsf?cr=6178739

I have spent a good amount of time stepping through the simple TestFormat code supplied in the bug report. I noticed some interesting behavior when running the following line in the test which throws the MissingFormatWidthException:

   System.out.printf("%0.4f\n", 56789.456789);

During the execution of this line, the Formatter class appears to treat the "0" not as a width value, which the author of the bug report intended, but rather as a flag value. "0" is a valid flag value indicating that the result will be zero-padded. But, in this case the author of the bug report intended to use the "0" as a width value, citing the Formatter specification text "The optional width is a non-negative decimal integer indicating the minimum number of characters to be written to the output.". Using the "0" in this manner results in a MissingFormatWidthException. Since "0" can be a flag value and also a width value, I am wondering if we have found some sort of gray area in the specification.

So, my questions are:

   1. Is there possibly some specification text that needs to be used
   to disallow "0" for a width value?
   2. Or, is a value of "0" allowed to be used for both a flag value
   and width value?
   3. If question #2 is true, can "0" be used for both a flag and a
   width value at the same time?  I ask this because the current
   behavior appears to not work when running the following line:

       System.out.printf("%00.4f\n", 56789.456789);

       run:
       Exception in thread "main"
       java.util.DuplicateFormatFlagsException: Flags = '0'
            at java.util.Formatter$Flags.parse(Formatter.java:4186)
            at
       java.util.Formatter$FormatSpecifier.flags(Formatter.java:2595)
            at
       java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2664)
            at java.util.Formatter.parse(Formatter.java:2528)
            at java.util.Formatter.format(Formatter.java:2469)
            at java.io.PrintStream.format(PrintStream.java:970)
            at java.io.PrintStream.printf(PrintStream.java:871)
            at
       formatterwidthzero.FormatterWidthZero.main(FormatterWidthZero.java:18)

Thanks.
--
Oracle <http://www.oracle.com>
Brandon Passanisi | Principle Member of Technical Staff

Oracle Java Standards Conformance

Green Oracle <http://www.oracle.com/commitment> Oracle is committed to developing practices and products that help protect the environment

Reply via email to