使用ScriptEngine从String评估数学公式

时间:2013-12-12 19:52:07

标签: java string

这是我的代码:

double value = 2.55;
String formule = "x+x";

我希望将句子中的x变量替换为value变量,所以我的下一个代码是:

formule = formule.replace("x", String.valueOf(value));
System.out.println(formule);

我在终端返回0.0+0.0


这是我的代码,其中x - >永远0.0:

protected double Formule(Double Value) throws ScriptException
{
    String ValueString = Value.toString();
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    Double source = null;
    formule = formule.replace("sin", "Math.sin").
         replace("cos", "Math.cos").
         replace("tan", "Math.tan").
         replace("sqrt", "Math.sqrt").
         replace("sqr", "Math.pow").
         replace("log", "Math.log").
         replace("x", ValueString);
    try {
        source = (Double)engine.eval(formule);
    } catch(Exception exc) {
        JOptionPane.showMessageDialog(null, "Invalid input", "Error", JOptionPane.ERROR_MESSAGE);
    }
    this.repaint();
    return source;
}

解决!!!

我刚刚创建了名为tmp的临时字符串,现在看起来像这样

protected double Formule(Double Value) throws ScriptException
{       
    String tmp;
    tmp = formule.replace("sin", "Math.sin").
    replace("cos", "Math.cos").
    replace("tan", "Math.tan").
    replace("sqrt", "Math.sqrt").
    replace("sqr", "Math.pow").
    replace("log", "Math.log").
    replace("x", String.valueOf(Value));
    try {
        return (Double)engine.eval(tmp);
    } catch(Exception fexp) {
        return null;      
    }
    return 0;
}

因为String formule是我班级的全局变量

1 个答案:

答案 0 :(得分:5)

此代码(来自您的帖子) -

public static void main(String[] args) {
  double value = 2.55;
  String formule = "x+x";
  formule = formule.replace("x",
      String.valueOf(value));
  System.out.println(formule);
}

打印

2.55+2.55

在这里运行时。您确定要访问上面初始化的double value吗?看起来您必须访问另一个名为0的变量(未按预期初始化 - 因此值value)。