diff --git a/src/uu/numfmt/src/format.rs b/src/uu/numfmt/src/format.rs index 812fe90e0..d55e701b9 100644 --- a/src/uu/numfmt/src/format.rs +++ b/src/uu/numfmt/src/format.rs @@ -581,7 +581,12 @@ fn format_string( let padded_number = match padding { 0 => number_with_suffix, p if p > 0 && options.format.zero_padding => { - let zero_padded = pad_string(&number_with_suffix, p as usize, '0', true); + let zero_padded = if let Some(unsigned) = number_with_suffix.strip_prefix(['-', '+']) { + let sign = &number_with_suffix[..1]; + format!("{sign}{}", pad_string(unsigned, p as usize - 1, '0', true)) + } else { + pad_string(&number_with_suffix, p as usize, '0', true) + }; match implicit_padding.unwrap_or(options.padding) { 0 => zero_padded, diff --git a/tests/by-util/test_numfmt.rs b/tests/by-util/test_numfmt.rs index 116f3ec26..f7d21e666 100644 --- a/tests/by-util/test_numfmt.rs +++ b/tests/by-util/test_numfmt.rs @@ -1428,7 +1428,6 @@ fn test_from_unit_fractional_precision_issue_11663() { // Zero-padded `--format` places padding zeros before the sign for negative // numbers; GNU (and C printf) puts the sign first. #[test] -#[ignore = "GNU compat: see uutils/coreutils#11664"] fn test_zero_pad_sign_order_issue_11664() { new_ucmd!() .args(&["--from=none", "--format=%018.2f", "--", "-9869647"])