In one of the C++ modules we have, we have an expression evaluation language.
\
EVDataElement NAME::eval( const EvalContext &ec, \
const bool recursiveFlag, \
EVEvaluatorTraceFormatter * trace ) \
{ \
/* EVTimer timer("(DECLARE_REL_EVAL)","eval","*", "", 1,1, 3); */ \
EVDataElement val ( \
(left->eval(ec, recursiveFlag, trace)) \
OP (right->eval(ec, recursiveFlag, trace)) ); \
return val; \
}
DECLARE_REL_EVAL(oLT,<)
DECLARE_REL_EVAL(oLE,<=)
DECLARE_REL_EVAL(oGT,>)
DECLARE_REL_EVAL(oGE,>=)
DECLARE_REL_EVAL(oEQ,==)
DECLARE_REL_EVAL(oNE,!=)
The module allows certain configuration rules to be set.
SO, if there was a rule in the database that said field1 - field2 > param1, it verifies this condition by passing to the expression language above and returns a result.
The problem we are facing now is say param1 = 3, and field1 = 6.15, and field2 = 3.15
It says the result is true. And I think it is because the difference of 6.15 and 3.15 results in 3.00
And when 3.00 is compared with 3, it thinks 3.00 is greater. Is there any way to work around this?
The reason I said we can't use casting is because we never know what datatype might come through for left and right. I hope this question made sense.