Skip to content

Commit f608df4

Browse files
authored
Formatting with width and separator doesn't work correctly (#5927)
* Fix add_magnitude_separators * Add extra tests
1 parent 54ff198 commit f608df4

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

common/src/format.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,12 @@ impl FormatSpec {
436436
let sep = char::from(fg);
437437
let inter = self.get_separator_interval().try_into().unwrap();
438438
let magnitude_len = magnitude_str.len();
439-
let width = self.width.unwrap_or(magnitude_len) as i32 - prefix.len() as i32;
440-
let disp_digit_cnt = cmp::max(width, magnitude_len as i32);
439+
let disp_digit_cnt = if self.fill == Some('0'.into()) {
440+
let width = self.width.unwrap_or(magnitude_len) as i32 - prefix.len() as i32;
441+
cmp::max(width, magnitude_len as i32)
442+
} else {
443+
magnitude_len as i32
444+
};
441445
Self::add_magnitude_separators_for_char(magnitude_str, inter, sep, disp_digit_cnt)
442446
}
443447
None => magnitude_str,

extra_tests/snippets/builtin_format.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ def test_zero_padding():
8181
assert f"{123.456:+011,}" == "+00,123.456"
8282
assert f"{1234:.3g}" == "1.23e+03"
8383
assert f"{1234567:.6G}" == "1.23457E+06"
84+
assert f"{1234:10}" == " 1234"
85+
assert f"{1234:10,}" == " 1,234"
86+
assert f"{1234:010,}" == "00,001,234"
8487
assert f"{'🐍':4}" == "🐍 "
8588
assert_raises(
8689
ValueError, "{:,o}".format, 1, _msg="ValueError: Cannot specify ',' with 'o'."
@@ -165,6 +168,9 @@ def test_zero_padding():
165168
assert f"{3.1415:#.2}" == "3.1"
166169
assert f"{3.1415:#.3}" == "3.14"
167170
assert f"{3.1415:#.4}" == "3.142"
171+
assert f"{1234.5:10}" == " 1234.5"
172+
assert f"{1234.5:10,}" == " 1,234.5"
173+
assert f"{1234.5:010,}" == "0,001,234.5"
168174
assert f"{12.34 + 5.6j}" == "(12.34+5.6j)"
169175
assert f"{12.34 - 5.6j: }" == "( 12.34-5.6j)"
170176
assert f"{12.34 + 5.6j:20}" == " (12.34+5.6j)"

0 commit comments

Comments
 (0)