java 字符串公式及条件判断表达式,计算方法

//头文件

import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

 

    //公式计算
    private float ExecutionStrFormula(Map<String,Object> thfuInfo,String formulaStr)
	{
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		Compilable compilable = (Compilable) engine;
		Bindings bindings = engine.createBindings(); //Local级别的Binding
		CompiledScript JSFunction = null; //解析编译脚本函数
		try {
			JSFunction = compilable.compile(formulaStr);
			bindings.put("S", (float)thfuInfo.get("thfu_s"));
			bindings.put("A", (float)thfuInfo.get("thfu_a"));

			Object result = JSFunction.eval(bindings);
			return StringUtils.toFloat(result);

		} catch (ScriptException e) {
			e.printStackTrace();
			return  0.0f;
		}
	}

    //条件表达式计算
    private static boolean ExecutionStrConditional(String formulaStr,float thefGrade)
	{
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		Compilable compilable = (Compilable) engine;
		Bindings bindings = engine.createBindings(); //Local级别的Binding
		CompiledScript JSFunction = null; //解析编译脚本函数
		try {
			JSFunction = compilable.compile(formulaStr);
			bindings.put("G",thefGrade);

			Object result = JSFunction.eval(bindings);
			//return StringUtils.toFloat(result);
			return Boolean.parseBoolean(result.toString());

		} catch (ScriptException e) {
			e.printStackTrace();
			return false;
		}
	}

//调用方法

public static void main(String[] args){
	Map<String ,Object>  thboMap = Maps.newHashMap();
	thboMap.put("thfu_s",1.1f);
	thboMap.put("thfu_a",1.2f);
	ExecutionStrFormula(thboMap,"-0.00026*A*A+0.022*A+0.01");
	ExecutionStrFormula(thboMap,"8271");
	ExecutionStrFormula(thboMap,"-0.227*S*S+1.789*S +0.002");
	
	System.out.println(ExecutionStrConditional("true",850));//所有规模
	System.out.println(ExecutionStrConditional("G<=8",5));//≤8
	System.out.println(ExecutionStrConditional("G>=9&&G<=19",10));
	System.out.println(ExecutionStrConditional("G>=750",850));	//≥750		
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值