RFC: 6178739 - Formatter - Zero padding flag with zero width

Brian Burkhalter brian.burkhalter at oracle.com
Thu Jun 27 18:27:20 UTC 2013


On Jun 26, 2013, at 10:55 PM, David DeHaven wrote:

>>> Specifically, I was referred to how C handles "%0.4f\n".
> 
> No width, decimal truncated (rounded? floored? I forgot which it is) to four digits.
> 
> -DrD-
> 
>>>   printf("%0.4f\n", 56789.456789F);
> ...
>>> 56789.4570
>>  ^ ^ ^ ^ ^ ^ ^ ^
> ...
>> "A leading zero in the width value is interpreted as the zero-padding flag mentioned above […]."
> 
> Only if there's a valid width following, which there isn't in the case above. Try "%016.4" with the above test. Note that the width is the *full* width of the entire field, including decimal point and following digits.
> 
> printf("%016.4f\n", 56789.456789F);
> printf("%0.4f\n", 56789.456789F);
> 
> Produces:
> 00000056789.4570
> 56789.4570

    printf("%016.4f\n", 56789.456789F);
    printf("%1.4f\n", 56789.456789F);
    printf("%0.4f\n", 56789.456789F);

produces (on Mac OS X)

00000056789.4570
56789.4570
56789.4570

whereas

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

produces

00000056789.4568
56789.4568
Exception in thread "main" java.util.MissingFormatWidthException: %0.4f

Two possible solutions are:

1) Change the specification of the width field to

"The optional width is a positive decimal integer indicating the minimum
number of characters to be written to the output. A leading zero in the width
value is interpreted to be the zero-padding flag discussed below."

2) Handle a 0.x as indicating zero width, not zero padding.

Brian


More information about the core-libs-dev mailing list