expression.jar中关于计算公式的使用

使用时,需要自定义方法时:

public class MIFunction extends Function{


public MIFunction(String functionName, DataType[] argumentsDataType) {
super(functionName,argumentsDataType);
// TODO Auto-generated constructor stub
}


@Override
public int getArgumentNum() {
// TODO Auto-generated method stub
return 1;
}


@Override
protected Object executeFunction(Valuable[] arguments)
throws ArgumentsMismatchException {
// TODO Auto-generated method stub
double value1 = ((BigDecimal)arguments[0].getValue()).doubleValue();
Log.e("1111111", "value1=>"+value1);
double value2 = ((BigDecimal)arguments[1].getValue()).doubleValue();
Log.e("2222222", "value2=>"+value2);
double value = value1*Math.pow(1.3,(20-value2)/10);
return 10;
}

}

public void drive() {
if (!exps.isEmpty()) {
ExpressionFactory factory = ExpressionFactory.getInstance();
for (Cell cell : exps) {
//获取公式
String expStr = ((DefaultCell)cell).getExpression();
if(!expStr.endsWith(";"))
expStr += ";";
//获取标记
String paraStr = ((DefaultCell)cell).getPramTags();
final String[] para = paraStr.split(",");
/*if(!TextUtils.isEmpty(paraStr)){
final String[] para = paraStr.split(",");
}*/
// String tag = ((DefaultCell)cell).getTag();
//当前的edittext
final EditText target = (EditText) root.findViewWithTag(((DefaultCell)cell).getTag());

HashMap<String, EditText> map = new HashMap<String, EditText>();
final Expression exp = factory.getExpression(expStr);
//将当前公式加入
addFunction(exp, expStr);
//根据tag在布局找到控件
findView(para, map, root);
for (Map.Entry<String, EditText> entry : map.entrySet()) {
setWatcher(context, para, target, exp, entry, root, ((DefaultCell)cell).getName(),isClean);
}
}
}
}


private void findView(String[] para, HashMap<String, EditText> map,
LinearLayout root) {
if(para!=null&&para.length>0){
for (String tag : para) {
if (TextUtils.isEmpty(tag))
continue;
EditText p = null;
if (tag.startsWith("_")) {
p = (EditText) root.findViewWithTag(tag.substring(1));
} else {
p = (EditText) root.findViewWithTag(tag);
}
map.put(tag, p);
}
}
}


private void setWatcher(Context context, String[] para, EditText target,
Expression exp, Map.Entry<String, EditText> entry, 
LinearLayout root, String defaultStr,boolean isClean) {
EditText et = entry.getValue();
String tag = entry.getKey();
if(tag.startsWith("_"))

return;

    //设置的监听事件,ExpressionWatcher 继承自TextWatcher。

ExpressionWatcher watcher = new ExpressionWatcher(context, root, para, exp, target,isClean);
watcher.setDefaultStr(defaultStr);
et.addTextChangedListener(watcher);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_zxw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值