有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数学。当参数名为“e”时,mxparser返回NaN

我用数学。​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"));

是图书馆里的虫子吗?还是有什么错误


共 (2) 个答案

  1. # 1 楼答案

    是的,“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,你可以学习语法ScalarCalculatorapp

    致意

  2. # 2 楼答案

    也许“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