From afcc54fddc6e1f7bcdaa550bed7cb3ebd8bb0571 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Fri, 23 Oct 2026 20:53:02 +0200 Subject: [PATCH] Omit minus sign when FormCalc Format() rounds to zero Found while testing crates/js/src/formcalc.rs:2328-2330 ("format" number-picture branch, `if num < 0.0 { text = format!("-{text}") }`) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/js/src/formcalc.rs | 3 ++- crates/js/src/tests.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/js/src/formcalc.rs b/crates/js/src/formcalc.rs index 2348ce220..50191f1f0 100644 --- a/crates/js/src/formcalc.rs +++ b/crates/js/src/formcalc.rs @@ -2325,10 +2325,11 @@ impl Interp<'_> { } text = if frac.is_empty() { g } else { format!("{g}.{frac}") }; } + let nonzero = text.chars().any(|c| ('1'..='9').contains(&c)); if pic.contains('$') { text = format!("${text}"); } - if num < 0.0 { + if num < 0.0 && nonzero { text = format!("-{text}"); } Val::Str(text) diff --git a/crates/js/src/tests.rs b/crates/js/src/tests.rs index b2e866fae..c7419be47 100644 --- a/crates/js/src/tests.rs +++ b/crates/js/src/tests.rs @@ -805,6 +805,14 @@ mod formcalc { o.result.unwrap_or_default() } + /// A negative value that rounds to zero under the picture prints without a minus sign. + #[test] + fn format_does_not_print_negative_zero() { + assert_eq!(calc(r#"Format("9.9", -0.04)"#), "0.0"); + assert_eq!(calc(r#"Format("99", -0.2)"#), "00"); + assert_eq!(calc(r#"Format("9.9", -1.5)"#), "-1.5"); + } + /// Assigning one long value to many fields at once stops at the run's byte budget and is /// charged per copy, and a reset list names each field once. #[test]