diff options
| author | Piotr Jawniak <sawyer47@gmail.com> | 2017-03-04 21:29:17 +0100 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-03-15 07:50:44 -0700 |
| commit | 80654862831e27f249f05bcb50552510f1b5f643 (patch) | |
| tree | abeb7612df8326f2050a594c3d12e13a2afd74cd | |
| parent | ff63866edb511a73eed657a8a4f5c81f1ee5a9bb (diff) | |
| download | rust-80654862831e27f249f05bcb50552510f1b5f643.tar.gz rust-80654862831e27f249f05bcb50552510f1b5f643.zip | |
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|
| -rw-r--r-- | src/libcore/fmt/mod.rs | 5 | ||||
| -rw-r--r-- | src/test/run-pass/ifmt.rs | 12 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/libcore/fmt/mod.rs b/src/libcore/fmt/mod.rs index fd77201317f..0bfab92fa5d 100644 --- a/src/libcore/fmt/mod.rs +++ b/src/libcore/fmt/mod.rs @@ -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 diff --git a/src/test/run-pass/ifmt.rs b/src/test/run-pass/ifmt.rs index dcd3920ffd9..cef2f879f9c 100644 --- a/src/test/run-pass/ifmt.rs +++ b/src/test/run-pass/ifmt.rs @@ -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"); |
