2

私はしばらくの間グーグルを検索してきましたが、必要なものが見つかりません。オープンソースの数式パーサーとエバリュエーターが必要です。その中には無数にありますが、ApacheCommonsMathのようなまともな数学ライブラリーにリンクしているものが必要です。複雑な算術、sinのような基本関数、複素平面で機能するlog、およびgamma、erfのような関数が必要です。

私が見つけた最も近い答えは、Javaで数式を評価するための組み込みメソッドでしたが、無数のヘルパー関数を作成する以外に、バインドする方法がわかりませんでした。

  • jexpr
  • jruby
  • ジェヴァル
  • javax.script

Commonsmathを使用します。また、すべての関数をバインドするために、既存の(実数値の)式パーサーを変更するには、かなりの作業が必要になります。

さらに、私のアプリにpython / ruby​​のようなスクリプトプログラミング言語全体を含めるのはやり過ぎのようです。私がやりたいのは、昔ながらのポケット電卓以上のものではありません。

誰かがこの種のことをすでにやったことがありませんか?ありがとう!

4

2 に答える 2

2

私が作成した実装をチェックアウトすることをお勧めします。

https://github.com/uklimaschewski/EvalEx .

java.math.BigDecimalこれは、基本的な数学およびブール演算に基づいており、サポートしています。これは非常にコンパクトな実装です。他のライブラリへの依存関係のない単一のクラス ファイルのみです。さらに、カスタム関数と演算子で簡単に拡張できます。

あなたのgamma(1.8)例は次のように追加できます:

Expression e = new Expression("gamma(1.8)");

e.addFunction(e.new Function("gamma", 1) {
    @Override
    public BigDecimal eval(List<BigDecimal> parameters) {
        BigDecimal gamma = MyMathLibraryGammaCalculation(parameters.get(0));
        return gamma;
    }
});

e.eval(); // returns gamma(1.8)
于 2013-03-27T10:08:13.427 に答える
0

以前は JavaScript 用の ScriptEngine を使用してこれを行っていました - それが要件に十分かどうかはわかりません... SA の参照は次のとおりです。

Javaにeval()関数はありますか?

于 2013-03-10T08:21:14.877 に答える