我使用数学.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”(或除“ e”之外的所有类似“ x”,“ y”,“ z1”等的东西)时,它的工作原理如下:

                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”是保留关键字。您可以通过关键字操作选项轻松更改此设置。

如果您只想删除一个或几个关键字:

mXparser.removeBuiltinTokens(...)


API:http://mathparser.org/api/org/mariuszgromada/math/mxparser/mXparser.html#removeBuiltinTokens-java.lang.String...-

如果不想删除,而是要修改关键字

mXparser.modifyBuiltinToken(...)


API:http://mathparser.org/api/org/mariuszgromada/math/mxparser/mXparser.html#modifyBuiltinToken-java.lang.String-java.lang.String-

另外,您可以设置mXparser选项,以指示您希望从mXparser始终将用户关键字视为更重要

mXparser.setToOverrideBuiltinTokens()


API:http://mathparser.org/api/org/mariuszgromada/math/mxparser/mXparser.html#setToOverrideBuiltinTokens--

参见教程:
https://mathparser.org/mxparser-tutorial/built-in-tokens-key-words-manipulation/

另外,您使用的不是最佳构造函数来设置参数-在您的情况下,使用起来会更有效

public Argument​(String argumentName, double argumentValue)


API:http://mathparser.org/api/org/mariuszgromada/math/mxparser/Argument.html#Argument-java.lang.String-double-

另外-该软件也使用mXparser-您可以学习语法Scalar Calculator app

最好的祝福

关于java - Java数学.mxparser当参数名称为“e”时返回NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58891770/

10-10 02:37