use rust_decimal::Decimal;
pub fn round_to_significant_digits(value: Decimal, sig_figs: u32) -> Decimal {
if value.is_zero() {
return Decimal::ZERO;
}
let abs_value = value.abs();
let str_value = abs_value.to_string();
let all_digits: String = str_value.chars().filter(|c| c.is_ascii_digit()).collect();
let total_digits = all_digits.len();
if total_digits <= sig_figs as usize {
return value;
}
let excess = total_digits - sig_figs as usize;
let divisor = Decimal::from(10_i64.pow(excess as u32));
let truncated = (abs_value / divisor).floor() * divisor;
if value.is_sign_negative() {
-truncated
} else {
truncated
}
}