From 50358db183f5d2d352f151a80941644000534b5b Mon Sep 17 00:00:00 2001 From: electria Date: Thu, 16 Jul 2026 11:25:48 -0700 Subject: [PATCH] refactor: significant digits calculation out of `fn main` --- src/main.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index e0ed1f9..da7de51 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,20 @@ pub fn parse_and_calc(s: &str) -> Float { nodes::Nodes::from_str(s).unwrap().evaluate() } +pub fn get_significant_digits(n: &Float) -> usize { + let raw_string = format!("{n}"); + + let mut significant_digits = raw_string.len() - 1; + for (i, _) in raw_string.char_indices() { + if !raw_string[i..raw_string.len()].contains(|c| matches!(c, '1'..'9')) { + significant_digits = i; + break; + } + } + + significant_digits +} + fn main() { let input = match env::args().skip(1).reduce(|x, a| a + &x) { Some(s) => s, @@ -24,14 +38,5 @@ fn main() { let result = parse_and_calc(&input); - let result_raw_string = format!("{}", result); - let mut significant_digits = result_raw_string.len() - 1; - for (i, _) in result_raw_string.char_indices() { - if !result_raw_string[i..result_raw_string.len()].contains(|c| matches!(c, '1'..'9')) { - significant_digits = i; - break; - } - } - - println!("{result:.significant_digits$}"); + println!("{result:.0$}", get_significant_digits(&result)); }