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

他のクラスを使用したり、式を書き直したりしてもかまいません。が大きいz場合に戻ることができる限り、それ以外の場合、および数式が文字列のままである限り。xy0

4

1 に答える 1

2

問題は、EvalMathがすでにサポートしている関数の観点から不等式演算子を再表現することに要約されます。このバージョンmaxには機能があるためmin、次のように再表現できます。

  • (x > y)なので

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

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

これは正確な等式、つまりx=yの場合もカバーすることに注意してください。

于 2013-01-09T08:04:22.347 に答える