refactor: significant digits calculation out of fn main

This commit is contained in:
electria 2026-07-16 11:25:48 -07:00
commit 50358db183
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -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));
}