簡體   English   中英

使用ScriptEngine從String評估數學公式

[英]Evaluate math formula from String using ScriptEngine

這是我的代碼:

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是我班上的全局變量

此代碼(來自您的帖子)-

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嗎? 看來您必須訪問另一個名為value變量(該變量未按預期初始化,因此值為0 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM