diff --git a/common/src/format.rs b/common/src/format.rs index 92ab99a571..819061f86b 100644 --- a/common/src/format.rs +++ b/common/src/format.rs @@ -436,8 +436,12 @@ impl FormatSpec { let sep = char::from(fg); let inter = self.get_separator_interval().try_into().unwrap(); let magnitude_len = magnitude_str.len(); - let width = self.width.unwrap_or(magnitude_len) as i32 - prefix.len() as i32; - let disp_digit_cnt = cmp::max(width, magnitude_len as i32); + let disp_digit_cnt = if self.fill == Some('0'.into()) { + let width = self.width.unwrap_or(magnitude_len) as i32 - prefix.len() as i32; + cmp::max(width, magnitude_len as i32) + } else { + magnitude_len as i32 + }; Self::add_magnitude_separators_for_char(magnitude_str, inter, sep, disp_digit_cnt) } None => magnitude_str, diff --git a/extra_tests/snippets/builtin_format.py b/extra_tests/snippets/builtin_format.py index 457adaa136..ac7afb769a 100644 --- a/extra_tests/snippets/builtin_format.py +++ b/extra_tests/snippets/builtin_format.py @@ -81,6 +81,9 @@ def test_zero_padding(): assert f"{123.456:+011,}" == "+00,123.456" assert f"{1234:.3g}" == "1.23e+03" assert f"{1234567:.6G}" == "1.23457E+06" +assert f"{1234:10}" == " 1234" +assert f"{1234:10,}" == " 1,234" +assert f"{1234:010,}" == "00,001,234" assert f"{'🐍':4}" == "🐍 " assert_raises( ValueError, "{:,o}".format, 1, _msg="ValueError: Cannot specify ',' with 'o'." @@ -165,6 +168,9 @@ def test_zero_padding(): assert f"{3.1415:#.2}" == "3.1" assert f"{3.1415:#.3}" == "3.14" assert f"{3.1415:#.4}" == "3.142" +assert f"{1234.5:10}" == " 1234.5" +assert f"{1234.5:10,}" == " 1,234.5" +assert f"{1234.5:010,}" == "0,001,234.5" assert f"{12.34 + 5.6j}" == "(12.34+5.6j)" assert f"{12.34 - 5.6j: }" == "( 12.34-5.6j)" assert f"{12.34 + 5.6j:20}" == " (12.34+5.6j)"