2017-04-05 16 views
0

ファイルの数式を読み、その値を評価する必要があります。例の表現形式は以下の通りです: - 定数 文字列の数式:NCalcの代替語

  • "3.1415 * 0.25" -

    • "5"定数式
    • "{0} - 50" - 値のプレースホルダ(String.Format()
    • "Abs({0} - 50)"と表現 - ちょうど好むが、数学関数と

    私は今までNCalcを使用していましたが、これは急行に対処しなければならない

      ちょうど次のコードの結果上記の例では残念ながら
    • "3.0 * Abs({0} + 34)"

    var value = ReadValueFromSomewhere(); // Lets say it returns 125.75 
    var exprStr = ReadExpression(); // returns: "3.0 * Abs({0} + 34)" 
    var toEval = String.Format(exprStr, value); 
    var result = new NCCalc.Expression(toEval).Evaluate() 
    

    例外以下の通りである。以下のようなイオン

    のSystem.InvalidOperationException

    演算子 '*' をタイプ 'ダブル' と '小数' NCalc.Numbers.Multiply(オブジェクト、オブジェクト) NCalc.Domain.EvaluationVisitor.Visit(NCalc.Domain.BinaryExpression) NCalcのオペランドに適用することはできません.Domain.BinaryExpression.Accept(NCalc.Domain.LogicalExpressionVisitor) NCalc.Expression.Evaluate()

    ABS()メソッドは、小数点を返し、NCalcはpropably(doubledecimalの間で計算をやって扱うことができないように思えますバグ?)。ですから、私はNCalcの代わりにどのような代替ライブラリを使うことができるのか尋ねたいと思います。

    • "Abs(3.0) * Abs({0} + 34)"

    :または、おそらく表現以外の回避策はありますか?

  • +0

    これはバグですね。 2年前のこの問題についての質問があります:http://stackoverflow.com/q/29255487/4996248その質問は、このフォーラムにリンクし、回避策を提案します:https://ncalc.codeplex.com/discussions/346702 –

    答えて

    0

    "値プレースホルダを持つ式"とはどういう意味ですか?より具体的な例を挙げることができますか?あなたはmXparserを試すことができます - それはJavaと.NETで動作します。使い方の

    例:

    Expression e = new Expression("3.1415 * 0.25"); 
    double v = e.calculate(); 
    

    mXparser tutorialに従ってください。

    よろしくお願いします。

    +0

    私の記事のように: 'Abs(3.0)* Abs({0} +34)'。 '{0}'を使って 'String.Format'でdouble型の値を挿入します。私はmXparserを見ていきます - ありがとう。 – Nethanek

    +0

    {0}の代わりに、ユーザー定義の引数またはユーザー定義定数を使用できます。http://mathparser.org/mxparser-tutorial/user-defined-arguments/またはhttp://mathparser.org/mxparser-tutorial/user-defined-constants/ –

    関連する問題