【发布时间】:2019-11-16 14:34:13
【问题描述】:
我使用math.mxparser在java类中评估java(j2ee)中的简单公式, 公式存储在数据库中,所以对于这个例子是“a+b+c”,我的意思是在这个公式中“e”没有使用, 但是当我的任何参数命名为“e”时,它会返回“NaN”(哦!)
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();
当我将“e”更改为“e1”(或“x”、“y”、“z1”等除“e”之外的所有内容)时效果很好,如下面的代码:
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"));
这是图书馆的错误吗?还是有什么错误?
【问题讨论】:
-
也许“e”是为自然对数 2.718 的底保留的......
-
avoid names reserved as parser keywords, in general words known in mathematical language as function names- 来自Argumentdocs。