committed by
Nicolás Hatcher Andrés
parent
1053d00d22
commit
eb76d8dd23
@@ -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(
|
_ => {
|
||||||
|
let mut currencies = vec!["$", "€"];
|
||||||
|
let currency = &self.locale.currency.symbol;
|
||||||
|
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, ¤cies) {
|
||||||
|
return Ok(NumberOrArray::Number(v));
|
||||||
|
}
|
||||||
|
Err(CalcResult::new_error(
|
||||||
Error::VALUE,
|
Error::VALUE,
|
||||||
cell,
|
cell,
|
||||||
"Expecting number".to_string(),
|
"Expecting number".to_string(),
|
||||||
)),
|
))
|
||||||
|
}
|
||||||
},
|
},
|
||||||
CalcResult::Boolean(f) => {
|
CalcResult::Boolean(f) => {
|
||||||
if f {
|
if f {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
BIN
xlsx/tests/calc_tests/TRUNC_INT_edgecases.xlsx
Normal file
BIN
xlsx/tests/calc_tests/TRUNC_INT_edgecases.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user