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);
}
- csr of
-
JDK-8262351 Extra '0' in java.util.Formatter for '%012a' conversion with a sign character
-
- Closed
-