Change how the 0 flag works in format! for floats
Now it always implies right-alignment, so that padding zeroes are placed after the sign (if any) and before the digits. In other words, it always takes precedence over explicitly specified `[[fill]align]`. :06 :<06 :>06 :^06 before |-001.2| |-1.200| |-001.2| |-01.20| after |-001.2| |-001.2| |-001.2| |-001.2|
This commit is contained in:
parent
ff63866edb
commit
8065486283
@ -1154,8 +1154,9 @@ impl<'a> Formatter<'a> {
|
||||
// for the sign-aware zero padding, we render the sign first and
|
||||
// behave as if we had no sign from the beginning.
|
||||
let mut formatted = formatted.clone();
|
||||
let mut align = self.align;
|
||||
let old_fill = self.fill;
|
||||
let old_align = self.align;
|
||||
let mut align = old_align;
|
||||
if self.sign_aware_zero_pad() {
|
||||
// a sign always goes first
|
||||
let sign = unsafe { str::from_utf8_unchecked(formatted.sign) };
|
||||
@ -1166,6 +1167,7 @@ impl<'a> Formatter<'a> {
|
||||
width = if width < sign.len() { 0 } else { width - sign.len() };
|
||||
align = rt::v1::Alignment::Right;
|
||||
self.fill = '0';
|
||||
self.align = rt::v1::Alignment::Right;
|
||||
}
|
||||
|
||||
// remaining parts go through the ordinary padding process.
|
||||
@ -1178,6 +1180,7 @@ impl<'a> Formatter<'a> {
|
||||
})
|
||||
};
|
||||
self.fill = old_fill;
|
||||
self.align = old_align;
|
||||
ret
|
||||
} else {
|
||||
// this is the common case and we take a shortcut
|
||||
|
@ -176,6 +176,18 @@ pub fn main() {
|
||||
t!(format!("{:<#05x}", 1), "0x001");
|
||||
t!(format!("{:>#05x}", 1), "0x001");
|
||||
t!(format!("{:^#05x}", 1), "0x001");
|
||||
t!(format!("{:05}", 1.2), "001.2");
|
||||
t!(format!("{:<05}", 1.2), "001.2");
|
||||
t!(format!("{:>05}", 1.2), "001.2");
|
||||
t!(format!("{:^05}", 1.2), "001.2");
|
||||
t!(format!("{:05}", -1.2), "-01.2");
|
||||
t!(format!("{:<05}", -1.2), "-01.2");
|
||||
t!(format!("{:>05}", -1.2), "-01.2");
|
||||
t!(format!("{:^05}", -1.2), "-01.2");
|
||||
t!(format!("{:+05}", 1.2), "+01.2");
|
||||
t!(format!("{:<+05}", 1.2), "+01.2");
|
||||
t!(format!("{:>+05}", 1.2), "+01.2");
|
||||
t!(format!("{:^+05}", 1.2), "+01.2");
|
||||
|
||||
// Ergonomic format_args!
|
||||
t!(format!("{0:x} {0:X}", 15), "f F");
|
||||
|
Loading…
x
Reference in New Issue
Block a user