在我们拥有的一个 C++ 模块中,我们有一种表达式评估语言。
\
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,!=)
该模块允许设置某些配置规则。
所以,如果数据库中有一条规则说 field1 - field2 > param1,它会通过传递给上面的表达式语言来验证这个条件并返回一个结果。
我们现在面临的问题是 param1 = 3, and field1 = 6.15, and field2 = 3.15
它说结果是真的。我认为这是因为 6.15 和 3.15 的差异导致 3.00
并且当 3.00 与 3 比较时,它认为 3.00 更大。有没有办法解决这个问题?
我说我们不能使用强制转换的原因是因为我们永远不知道左右可能会出现什么数据类型。我希望这个问题是有道理的。