diff --git a/src/formatting.rs b/src/formatting.rs index b157564..5292282 100644 --- a/src/formatting.rs +++ b/src/formatting.rs @@ -19,22 +19,10 @@ pub fn pretty_eval(mut input: String) -> Result { .is_some(); let result = nodes::eval(&input)?; - let display_digits = - get_significant_digits(&result) - .min(MAX_DIGITS) - .max(if result >= 1000 || result < 1 { - 1 - } else if result >= 100 { - 3 - } else if result >= 10 { - 2 - // if result >= 1 - } else { - 1 - }); + let significant_digits = get_significant_digits(&result).min(MAX_DIGITS); Ok(format!( - "{}{}{result:.display_digits$}{}", + "{}{}{result:.significant_digits$}{}", " ".repeat(leading_spaces), if should_add_back_equals && should_add_back_alignment { "& = " @@ -46,8 +34,7 @@ pub fn pretty_eval(mut input: String) -> Result { "" }, if should_add_back_backslash { " \\" } else { "" } - ) - .replace('e', " * 10^")) + )) } #[test] fn test_character_readdition() { @@ -56,19 +43,9 @@ fn test_character_readdition() { assert_eq!(pretty_eval(" & 11".into()).unwrap(), " & 11"); assert_eq!(pretty_eval(" & 11 \\".into()).unwrap(), " & 11 \\"); } -#[test] -fn test_basic_up_to_999() { - assert_eq!(pretty_eval("1".into()).unwrap(), "1"); - assert_eq!(pretty_eval("10".into()).unwrap(), "10"); - assert_eq!(pretty_eval("100".into()).unwrap(), "100"); - assert_eq!(pretty_eval("999".into()).unwrap(), "999"); - assert_eq!(pretty_eval("1000".into()).unwrap(), "1 * 10^3"); - - assert_eq!(pretty_eval("11.111111".into()).unwrap(), "11.111111"); -} pub fn get_significant_digits(n: &Float) -> usize { - let raw_string = n.to_string().replace('.', ""); + let raw_string: String = format!("{n}").chars().filter(|c| *c != '.').collect(); let mut consecutive_zeros = 0; let mut consecutive_nines = 0; diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index da7c34e..f435db4 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -25,7 +25,7 @@ pub fn eval(s: &str) -> Result { Ok(Nodes::from_str(s)?.evaluate()?) } -pub const PREC: u32 = 2048; +pub const PREC: u32 = 512; #[derive(Debug, Default, Clone, PartialEq)] pub struct Nodes(Vec);