jep自定义函数

jep自定义函数

jep自定义函数使用,下面是jep自定义函数计算年利率一个demo

jep在使用函数时,需要把相应的函数加入jep
幂函数

Jep jep = new Jep();
jep.addFunction("pow", new Power());

自定义函数也是如此
1.定义年利率计算类AnnualInterestRate,由于需要多个参数,故继承NaryFunction类,该类根据个人需求继承相应的类

package main.java.com.extension.jep;

import com.singularsys.jep.EvaluationException;
import com.singularsys.jep.functions.NaryFunction;

/**
 * 年利率计算 chenyouhong
 */
public class AnnualInterestRate extends NaryFunction {
    // Use default constructor: variable number of arguments

    // Ensure at least one argument
    //此处实际参数个数是4,此处并未做相关的判断 n == 4 ? true : false
    @Override
    public boolean checkNumberOfParameters(int n) {
        return true;
    }

	//处理方法及相应的入参
    public Object eval(Object[] args) throws EvaluationException {
        double amount = asDouble(0,args[0]);
        double newPrice = asDouble(1,args[1]);

        Integer periods = asInt(2,args[2]);
        double yearRate = asDouble(3,args[3]);

        return this.getYearRate(amount, newPrice, periods, yearRate);
    }

    private Double getYearRate(Double amount, Double newPrice, Integer periods, Double yearRate) {
        double yuegong = getMonth(amount, periods, yearRate);

        double yg = 1d;

        double yh = 1d;
        while (com.lz.utils.math.DoubleMathUtils.sub(yg, yuegong) <= 0) {
            yg = getMonth(newPrice, periods, yh);// 月供
            yh = com.lz.utils.math.DoubleMathUtils.sum(yh, 0.01);
        }
        return yh;
    }

    private Double getMonth(Double amount, Integer periods, Double yearRate) {
        double a = 0, i = 0;
        int n = 0;
        double c1;
        double c2;

        a = amount;// 总贷款
        n = periods;

        i = com.lz.utils.math.DoubleMathUtils.div(yearRate - 0.001d, 1200, 4);
        c2 = com.lz.utils.math.DoubleMathUtils.div(a * i * Math.pow((1 + i), n), Math.pow((1 + i), n) - 1, 2);
        return c2; // 161102 向下取整到小数点后两位
    }

}

2.年利率类定义后,应用与一般方法一致

Jep jep = new Jep();
//总金额
jep.addVariable("amount", 86900);
//实际金额
jep.addVariable("price", 67900 );
jep.addVariable("peridos", 36);
jep.addVariable("yearRate", 0.07125);
jep.addFunction("annualInterestRate", new AnnualInterestRate());
jep.parse("annualInterestRate(amount, price, peridos, yearRate)");

//最终年利率
System.out.println( jep.evaluate());

3.jep文档链接 http://www.singularsys.com/jep/doc/html/customfunctions.html

4.demo地址 https://github.com/13162576590/jep_demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值