mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-08 06:44:26 +00:00
Formula engine: fix abs() and modulus not working on decimals
This commit is contained in:
parent
fe05f51c9e
commit
c1ca72f1dc
@ -165,8 +165,14 @@ public:
|
||||
|
||||
private:
|
||||
variant execute(const formula_callable& variables, formula_debugger *fdb) const {
|
||||
const int n = args()[0]->evaluate(variables,fdb).as_int();
|
||||
return variant(n >= 0 ? n : -n);
|
||||
const variant input = args()[0]->evaluate(variables,fdb);
|
||||
if(input.is_decimal()) {
|
||||
const int n = input.as_decimal();
|
||||
return variant(n >= 0 ? n : -n, variant::DECIMAL_VARIANT);
|
||||
} else {
|
||||
const int n = input.as_int();
|
||||
return variant(n >= 0 ? n : -n);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -696,13 +696,23 @@ variant variant::operator/(const variant& v) const
|
||||
|
||||
variant variant::operator%(const variant& v) const
|
||||
{
|
||||
const int numerator = as_int();
|
||||
const int denominator = v.as_int();
|
||||
if(denominator == 0) {
|
||||
throw type_error((formatter() << "divide by zero error").str());
|
||||
}
|
||||
if(type_ == TYPE_DECIMAL || v.type_ == TYPE_DECIMAL) {
|
||||
const int numerator = as_decimal();
|
||||
const int denominator = v.as_decimal();
|
||||
if(denominator == 0) {
|
||||
throw type_error((formatter() << "divide by zero error").str());
|
||||
}
|
||||
|
||||
return variant(numerator%denominator, DECIMAL_VARIANT);
|
||||
} else {
|
||||
const int numerator = as_int();
|
||||
const int denominator = v.as_int();
|
||||
if(denominator == 0) {
|
||||
throw type_error((formatter() << "divide by zero error").str());
|
||||
}
|
||||
|
||||
return variant(numerator%denominator);
|
||||
return variant(numerator%denominator);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user