FIX: Issues with INT

Fixes #535
This commit is contained in:
Nicolás Hatcher
2025-11-16 17:34:21 +01:00
committed by Nicolás Hatcher Andrés
parent 1053d00d22
commit eb76d8dd23
3 changed files with 22 additions and 7 deletions

View File

@@ -24,11 +24,22 @@ impl Model {
CalcResult::Number(f) => Ok(NumberOrArray::Number(f)), CalcResult::Number(f) => Ok(NumberOrArray::Number(f)),
CalcResult::String(s) => match s.parse::<f64>() { CalcResult::String(s) => match s.parse::<f64>() {
Ok(f) => Ok(NumberOrArray::Number(f)), Ok(f) => Ok(NumberOrArray::Number(f)),
_ => Err(CalcResult::new_error( _ => {
Error::VALUE, let mut currencies = vec!["$", ""];
cell, let currency = &self.locale.currency.symbol;
"Expecting number".to_string(), if !currencies.iter().any(|e| e == currency) {
)), currencies.push(currency);
}
// Try to parse as a formatted number (e.g., dates, currencies, percentages)
if let Ok((v, _number_format)) = parse_formatted_number(&s, &currencies) {
return Ok(NumberOrArray::Number(v));
}
Err(CalcResult::new_error(
Error::VALUE,
cell,
"Expecting number".to_string(),
))
}
}, },
CalcResult::Boolean(f) => { CalcResult::Boolean(f) => {
if f { if f {

View File

@@ -1233,11 +1233,15 @@ impl Model {
if !(-15.0..=15.0).contains(&num_digits) { if !(-15.0..=15.0).contains(&num_digits) {
return CalcResult::Number(value); return CalcResult::Number(value);
} }
CalcResult::Number(if value >= 0.0 { let v = if value >= 0.0 {
f64::floor(value * 10f64.powf(num_digits)) / 10f64.powf(num_digits) f64::floor(value * 10f64.powf(num_digits)) / 10f64.powf(num_digits)
} else { } else {
f64::ceil(value * 10f64.powf(num_digits)) / 10f64.powf(num_digits) f64::ceil(value * 10f64.powf(num_digits)) / 10f64.powf(num_digits)
}) };
if value.is_finite() && v.is_infinite() {
return CalcResult::Number(value);
}
CalcResult::Number(v)
} }
single_number_fn!(fn_log10, |f| if f <= 0.0 { single_number_fn!(fn_log10, |f| if f <= 0.0 {

Binary file not shown.