fix(significant_digits): ignore dot completely

This commit is contained in:
electria 2026-07-21 13:19:32 -07:00
commit f9d4290659
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -28,7 +28,7 @@ pub fn parse_and_calc(s: &str) -> Float {
}
pub fn get_significant_digits(n: &Float) -> usize {
let raw_string = format!("{n}");
let raw_string: String = format!("{n}").chars().filter(|c| *c != '.').collect();
let mut significant_digits = raw_string.len() - 1;
let mut consecutive_zeros = 0;
@ -55,12 +55,12 @@ pub fn get_significant_digits(n: &Float) -> usize {
}
if !raw_string[i..raw_string.len()].contains(|c| matches!(c, '1'..='9')) {
significant_digits = i + 1;
significant_digits = i;
break;
}
}
significant_digits - raw_string.chars().filter(|c| *c == '.').count()
significant_digits
}
#[test]
@ -71,8 +71,12 @@ fn test_get_significant_digits() {
assert_eq!(many_nines.to_f64(), 44.0084);
let zero_nine_zero = parse_and_calc("2+12321(5+123)");
assert_eq!(zero_nine_zero.to_f64(), 1577090.0);
let test_4 =
parse_and_calc("12.0096 + 1.00784 * 3 + 12.0096 + 1.00784 * 2 + 15.9994 + 1.00784");
assert_eq!(test_4.to_f64(), 46.06564);
assert_eq!(get_significant_digits(&many_zeros), 8);
assert_eq!(get_significant_digits(&many_nines), 6);
assert_eq!(get_significant_digits(&zero_nine_zero), 6);
assert_eq!(get_significant_digits(&test_4), 7);
}