评估公式字符串中的不等式

时间:2013-01-09 07:47:57

标签: php math

如何解析下面的字符串:

"(x > y) * z"
// Should always return: 
// 1. float(0) if x < y
// 2. float(z) if x > y

我试图像这样使用 EvalMath

$m = new EvalMath;
$m->evaluate("(4 > 1) * 5");
// Throws an error: "illegal character '>'"

我不介意使用其他类,或重写公式。只要我z大于xy以及0,只要公式保持字符串,我就可以返回{{1}}。

1 个答案:

答案 0 :(得分:2)

问题归结为根据EvalMath已经支持的功能重新表达不等运算符。由于this version具有maxmin功能,我们可以重新表达:

  • (x > y)

    min(1, max(0, (x - y)))
    
  • (x < y)

    min(1, max(0, (y - x)))
    

请注意,这也包括完全相等,即x = y的情况。