也说企业应用中的公式管理功能

在我们日常开发企业应用或互联网应用中,往往会碰到公式的高级定义功能,用户可以自己增加公式,在此基础上进行高级分析,特别的在计费系统,金融领域等特别常见,比如用户可以定义如下公式:

 

公式 写道
min(sqrt(2)+max(2,max(1,2))+acos(30)*1.01-pow(2,3),2)

 可以得到:

 

 写道
计算结果:-3.5558624264945005

 

要实现这样的功能,可以分以下几个步骤完成:

 

  1. 分析系统中支持的常量,比如PI,E等,还有些比如类似:CLOSE表示当期收盘价等
  2. 分析系统中支持的函数,并且可从抽象类中持续继承与升级
  3. 公式的定义必须支持嵌套
比如实现最大值类:

public class MaxFunction extends AbstractFunction{

	@Override
	public Catalog getCatalog() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public MathematicalElement evaluate(Parameters parameters)
			throws EvalException {
		return evaluate(null,parameters);
	}

	@Override
	public MathematicalElement evaluate(OperatorManager operatorManager,
			Parameters parameters) throws EvalException {
		
		try {
			MathematicalElement x = parameters.getParameter("x");
			MathematicalElement y = parameters.getParameter("y");
			return NumberFactory.createReal(Math.max(x.getRealValue(), y.getRealValue()));
			
		}
		catch (ParametersException pe) {
			throw new EvalException("Could not find parameter x for function " + getName());
		}
	
	}



	@Override
	public String getName() {
		return "max";
	}

	@Override
	public List getParameters() {
		return ParameterUtil.generateXYParameters();
	}

}
 

可以借助一些开源的公式管理项目,如expression4j等,具体的Demo测试地址: http://code.faqee.com/gs/

你可能感兴趣的:(互联网,金融,项目管理,企业应用)