Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8263390

Extra '0' in java.util.Formatter for '%012a' conversion with a sign character

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P4 P4
    • 17
    • core-libs
    • None
    • behavioral
    • minimal
    • Java API
    • JDK

      Summary

      This CSR covers an update to the hexadecimal floating point conversion 'a' zero padding to fix a bug where an extra zero would be padded in the presence of a sign flag (+) or a leading space flag (' '). The change accounts for these flags when zero-padding.

      Problem

      The formatter does not account for a sign flag or leading sign space flag when formatting a hex float conversion with a zero-padding flag. This creates zero paddings with one too many zeros.

      Solution

      If a zero-padding flag is present, we check if a leading space or plus flag is present. If one of those flags is present, we shorten the zero padding length by an additional character.

      Specification

      diff --git a/src/java.base/share/classes/java/util/Formatter.java b/src/java.base/share/classes/java/util/Formatter.java
      index c4dc4c0b85d..17ab55ddd80 100644
      --- a/src/java.base/share/classes/java/util/Formatter.java
      +++ b/src/java.base/share/classes/java/util/Formatter.java
      @@ -3548,7 +3548,12 @@ public final class Formatter implements Closeable, Flushable {
                       sb.append(upper ? "0X" : "0x");
      
                       if (f.contains(Flags.ZERO_PAD)) {
      -                    trailingZeros(sb, width - s.length() - 2);
      +                    int leadingCharacters = 2;
      +                    if(f.contains(Flags.LEADING_SPACE) ||
      +                            f.contains(Flags.PLUS) || neg) {
      +                        leadingCharacters = 3;
      +                    }
      +                    trailingZeros(sb, width - s.length() - leadingCharacters);
                       }

            igraves Ian Graves
            webbuggrp Webbug Group
            Stuart Marks
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: