Search code examples
javamathevalevaluate

java math.​mxparser returns NaN when argument name is "e"


I use math.​mxparser to evaluate simple formula in java (j2ee) in java class, Formula is store in database so for this example is "a+b+c", I mean in this formula "e" in not used, But when any of my arguments named as "e" it returns "NaN" (Oh !)

            Argument a = new Argument("a = " + (jjNumber.isFloat(final_values_date_a.get(i).get("_val").toString()) ? final_values_date_a.get(i).get("_val").toString() : "0"));
            Argument b = new Argument("b = " + (jjNumber.isFloat(final_values_date_b.get(i).get("_val").toString()) ? final_values_date_b.get(i).get("_val").toString() : "0"));
            Argument c = new Argument("c = " + (jjNumber.isFloat(final_values_date_c.get(i).get("_val").toString()) ? final_values_date_c.get(i).get("_val").toString() : "0"));
            Argument d = new Argument("d = " + (jjNumber.isFloat(final_values_date_d.get(i).get("_val").toString()) ? final_values_date_d.get(i).get("_val").toString() : "0"));
            Argument e = new Argument("e = " + (jjNumber.isFloat(final_values_date_e.get(i).get("_val").toString()) ? final_values_date_e.get(i).get("_val").toString() : "0"));
            Argument f = new Argument("f = " + (jjNumber.isFloat(final_values_date_f.get(i).get("_val").toString()) ? final_values_date_f.get(i).get("_val").toString() : "0"));
            Argument g = new Argument("g = " + (jjNumber.isFloat(final_values_date_g.get(i).get("_val").toString()) ? final_values_date_g.get(i).get("_val").toString() : "0"));
            Expression exp = new Expression(indicatorRow.get(0).get(_formula).toString(), a,b,c,d, e ,f,g );
            double v = exp.calculate();

It works good when I change "e" to "e1" (or every thing like "x","y","z1",etc except "e") like the code below :

                Argument e = new Argument("e1 = " + (jjNumber.isFloat(final_values_date_e.get(i).get("_val").toString()) ? final_values_date_e.get(i).get("_val").toString() : "0"));

Is it Bug in library ? or is there any mistake ?


Solution

  • Perhaps "e" is reserved for the base of the natural logarithms 2.718....

        public static void main(String[] args) {
        Argument a = new Argument("a = 40.8" );
        Argument b = new Argument("b = 20.2"); 
        Expression exp = new Expression("e", a, b );
                double v = exp.calculate();
                System.out.println("$$$$$$$$$$$>>>>>>>" + v);
    
    }
    

    $$$$$$$$$$$>>>>>>>2.718281828459045