java math. mxparser returns 当参数名称为 "e" 时为 NaN
java math.mxparser returns NaN when argument name is "e"
我使用 math. mxparser 在 java class 中评估 java (j2ee) 中的简单公式,
公式存储在数据库中,所以对于这个例子是 "a+b+c",我的意思是在这个公式中 "e" 没有被使用,
但是当我的任何参数命名为 "e" 时,它 returns "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....
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
是的,'e'是保留关键字。这可以通过关键字操作选项轻松更改。
如果您只想删除一个或几个关键字:
mXparser.removeBuiltinTokens(...)
如果不想删除,而是要修改关键字
mXparser.modifyBuiltinToken(...)
此外,您可以设置 mXparser 选项,表明您希望 mXparser 始终将用户关键字视为更重要
mXparser.setToOverrideBuiltinTokens()
查看教程:
https://mathparser.org/mxparser-tutorial/built-in-tokens-key-words-manipulation/
此外,您正在使用非最佳构造函数设置参数 - 在您的情况下,使用
会更有效
public Argument(String argumentName, double argumentValue)
此外 - 此软件也使用 mXparser - 您可以学习语法 Scalar Calculator app.
此致
我使用 math. mxparser 在 java class 中评估 java (j2ee) 中的简单公式, 公式存储在数据库中,所以对于这个例子是 "a+b+c",我的意思是在这个公式中 "e" 没有被使用, 但是当我的任何参数命名为 "e" 时,它 returns "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....
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
是的,'e'是保留关键字。这可以通过关键字操作选项轻松更改。
如果您只想删除一个或几个关键字:
mXparser.removeBuiltinTokens(...)
如果不想删除,而是要修改关键字
mXparser.modifyBuiltinToken(...)
此外,您可以设置 mXparser 选项,表明您希望 mXparser 始终将用户关键字视为更重要
mXparser.setToOverrideBuiltinTokens()
查看教程: https://mathparser.org/mxparser-tutorial/built-in-tokens-key-words-manipulation/
此外,您正在使用非最佳构造函数设置参数 - 在您的情况下,使用
会更有效public Argument(String argumentName, double argumentValue)
此外 - 此软件也使用 mXparser - 您可以学习语法 Scalar Calculator app.
此致