字符串公式计算 "(a+b)*c"

 // 示例:strFormULA = (a+b)*c 
 // 如果替换a=1 b=1 c=2 则结果为 (1+1)*2 = 4
 public int CalculateStringFormula(string strFormULA )
{
    var type = Type.GetTypeFromProgID("MSScriptControl.ScriptControl");
    var obj = Activator.CreateInstance(type);
    type.InvokeMember("Language", System.Reflection.BindingFlags.SetProperty, null, obj, new object[] { "javascript" });
    int result = Convert.ToInt32(type.InvokeMember("Eval", System.Reflection.BindingFlags.InvokeMethod, null, obj, new object[] { strFormULA }));
    return result;
}

转载于:https://www.cnblogs.com/zzuliulei/archive/2013/01/10/2854576.html

如果公式都以字符串的形式给出,您可以使用 Java 的 ScriptEngine 类来计算表达式,具体实现如下: ``` import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { String formula = "1 + 2 + 3 + 4 * (5 + 6 / 2)"; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); try { Object result = engine.eval(formula); System.out.println(result); } catch (ScriptException e) { e.printStackTrace(); } } } ``` 在这段代码,我们首先将要计算的表达式以字符串的形式存储在变量 formula 。然后通过 ScriptEngineManager 类获取一个 ScriptEngine 对象,并指定使用 JavaScript 引擎。接着,我们使用 ScriptEngine 对象的 eval() 方法计算表达式,将计算结果存储在 result 变量,并输出结果。最终得到的结果也会与前面的例子一样,输出为 27。 如果公式的变量也是字符串形式,可以使用字符串替换的方式将变量替换成对应的值,然后再使用 ScriptEngine 计算表达式。例如: ``` import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { String formula = "a + b + c + d * (e + f / c)"; String[] vars = {"a", "b", "c", "d", "e", "f"}; int[] vals = {1, 2, 3, 4, 5, 6}; for (int i = 0; i < vars.length; i++) { formula = formula.replace(vars[i], String.valueOf(vals[i])); } ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); try { Object result = engine.eval(formula); System.out.println(result); } catch (ScriptException e) { e.printStackTrace(); } } } ``` 在这段代码,我们首先将要计算的表达式以字符串的形式存储在变量 formula ,变量名以字符串形式存储在 vars 数组,变量值以整数形式存储在 vals 数组。然后使用 for 循环遍历 vars 数组,将 formula 的变量名替换成对应的值。最后,使用 ScriptEngine 计算表达式,得到的结果也会与前面的例子一样,输出为 25。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值