1

如何解析下面的字符串:

"(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 '>'"

我不介意使用其他类或重写公式。只要我可以返回zwhenx大于yelsewise0并且只要公式保持为字符串。

4

1 回答 1

2

问题归结为用 EvalMath 已经支持的函数重新表达不等式运算符。既然这个版本maxmin功能,我们可以重新表述:

  • (x > y)作为

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

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

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

于 2013-01-09T08:04:22.347 回答