为什么我在使用scriptenginemanager时通过传递字符串公式而出错?

abithluo  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(320)

我用的是java的 ScriptEngineManager 运行一些将以字符串值形式出现的数学公式。
但我收到以下错误,我找不到原因。

private void testFormula(){
    String form ="((15.643333435058594+15.79137191501063+15.432352762204175+15.77764736947019+15.550000190734863)/5-15)-0.6";
    String form2 = "(((13.468705654144287)^0.25)*100)–204.45040893554688";
    try {
        //Debug info
        log.info("[PRE-ENGINE][" + form + "]");

        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        form2 = engine.eval(form2).toString();

        //Debug info
        log.info("[RESULT:" + form2 + "]");

    } catch (Exception ex) {
        log.error(ex.getMessage());
    }
}

当我使用字符串form1运行adobe代码时,会毫无问题地返回结果。但是当我使用form2时,我得到了以下错误:

<eval>:1:33 Expected ; but found error   
 (((13.468705654144287)^0.25)*100)–204.45040893554688
                                 ^ in <eval> at line number 1 at column number 33

我不知道这个错误的原因是什么。

zengzsys

zengzsys1#

主要的问题是 String 实际上是unicode en破折号,因此无法正确解释;替换为实际的减号( - )来解决这个问题。
另一个问题是 ^ 实际上是按位异或运算符,它不执行指数运算。你需要用 ** .

console.log((((13.468705654144287)**0.25)*100)-204.45040893554688)

相关问题