diff --git a/crates/doc/src/text.rs b/crates/doc/src/text.rs index 097dd189..458426ad 100644 --- a/crates/doc/src/text.rs +++ b/crates/doc/src/text.rs @@ -60,6 +60,9 @@ impl LetterSpacing { } pub fn trim_num(v: f64) -> String { + if v.abs() >= 9.0e18 { + return format!("{v}"); + } let r = (v * 100.0).round() / 100.0; if r.fract().abs() < 1e-9 { format!("{}", r as i64) } else { format!("{r}") } } @@ -760,6 +763,15 @@ impl TextData { mod case_tests { use super::*; + #[test] + fn trim_num_prints_huge_whole_numbers() { + assert_eq!(trim_num(1e19), "10000000000000000000"); + assert_eq!(trim_num(-1e19), "-10000000000000000000"); + assert_eq!(trim_num(12.0), "12"); + let v = 12345678901234567890.0_f64; + assert_eq!(trim_num(v).parse::().unwrap(), v); + } + #[test] fn title_case_respects_context() { assert_eq!(TextCase::Title.apply("hello wORLD don't 3d x-ray"), "Hello WORLD Don't 3d X-Ray");