Commit f87d6dea by zhangkb

修改aviator表达式计算引擎计算整数取整问题

parent ecb3b9f4
...@@ -163,9 +163,12 @@ public class DriveIndIdObjCalActor extends AbstractActor{ ...@@ -163,9 +163,12 @@ public class DriveIndIdObjCalActor extends AbstractActor{
String indValue = baseIndValueMsg.getValue(); String indValue = baseIndValueMsg.getValue();
//如果指标值返回空值 //如果指标值返回空值
if(StringUtils.isBlank(indValue)) { if(StringUtils.isBlank(indValue)) {
indValue="0.0"; indValue="0.00";
} }
try { try {
if(indValue.indexOf(".")<0) {
indValue += ".00";
}
driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]", driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]",
indValue); indValue);
//替换公式中的基础指标id为确定指标值 //替换公式中的基础指标id为确定指标值
......
...@@ -192,6 +192,9 @@ public class DriveIndDefService { ...@@ -192,6 +192,9 @@ public class DriveIndDefService {
List<String> indDateList = baseIndDataService.getIndData(indId, List<String> indDateList = baseIndDataService.getIndData(indId,
date,compareObjs,code); date,compareObjs,code);
String sumValue = CalculateUtils.sumValue(indDateList); String sumValue = CalculateUtils.sumValue(indDateList);
if(sumValue.indexOf(".")<0) {
sumValue += ".00";
}
env.put(indId, Double.valueOf(sumValue)); env.put(indId, Double.valueOf(sumValue));
driveIndFormula = driveIndFormula.replace("["+indId+"]", sumValue); driveIndFormula = driveIndFormula.replace("["+indId+"]", sumValue);
} }
......
...@@ -42,6 +42,12 @@ public class CalculateUtils { ...@@ -42,6 +42,12 @@ public class CalculateUtils {
if(!"NaN".equals(currentValue) && !"Infinite".equals(currentValue) && StringUtils.isNotBlank(currentValue) if(!"NaN".equals(currentValue) && !"Infinite".equals(currentValue) && StringUtils.isNotBlank(currentValue)
&& !"NaN".equals(sameValue) && !"Infinite".equals(sameValue) && StringUtils.isNotBlank(sameValue)) { && !"NaN".equals(sameValue) && !"Infinite".equals(sameValue) && StringUtils.isNotBlank(sameValue)) {
Object value = null; Object value = null;
if(currentValue.indexOf(".")<0) {
currentValue += ".00";
}
if(sameValue.indexOf(".")<0) {
sameValue += ".00";
}
if("0".equals(type)) { if("0".equals(type)) {
formula.append(currentValue).append("-").append(sameValue); formula.append(currentValue).append("-").append(sameValue);
}else { }else {
...@@ -133,10 +139,14 @@ public class CalculateUtils { ...@@ -133,10 +139,14 @@ public class CalculateUtils {
if(StringUtils.isBlank(values.get(i))) { if(StringUtils.isBlank(values.get(i))) {
continue; continue;
} }
String value = values.get(i);
if(value.indexOf(".")<0) {
value += ".00";
}
if(i==values.size()-1) {//最后一个不加+号 if(i==values.size()-1) {//最后一个不加+号
formula.append("(").append(values.get(i)).append(")"); formula.append("(").append(value).append(")");
}else { }else {
formula.append("(").append(values.get(i)).append(")").append("+"); formula.append("(").append(value).append(")").append("+");
} }
} }
if(formula.toString().endsWith("+")) { if(formula.toString().endsWith("+")) {
...@@ -172,10 +182,14 @@ public class CalculateUtils { ...@@ -172,10 +182,14 @@ public class CalculateUtils {
continue; continue;
} }
} }
String value = values.get(i);
if(value.indexOf(".")<0) {
value += ".00";
}
if(i==values.size()-1) {//最后一个不加+号 if(i==values.size()-1) {//最后一个不加+号
formula.append("(").append(values.get(i)).append(")"); formula.append("(").append(value).append(")");
}else { }else {
formula.append("(").append(values.get(i)).append(")").append("+"); formula.append("(").append(value).append(")").append("+");
} }
} }
if(formula.toString().endsWith("+")) { if(formula.toString().endsWith("+")) {
...@@ -379,9 +393,15 @@ public class CalculateUtils { ...@@ -379,9 +393,15 @@ public class CalculateUtils {
// map.put("1002", "5"); // map.put("1002", "5");
// formula = formula.replace("[1001]", "3"); // formula = formula.replace("[1001]", "3");
// formula = formula.replace("[1002]", "5"); // formula = formula.replace("[1002]", "5");
// String result1 = AviatorEvaluator.execute(formula).toString(); String ss = "1755";
String formula = "(ss/2299-1)*100";
if(ss.indexOf(".")<0) {
ss += ".00";
}
formula = formula.replace("ss", ss);
String result1 = AviatorEvaluator.execute(formula).toString();
// String result2 = cal.calculateFormula(formula, map); // String result2 = cal.calculateFormula(formula, map);
// System.out.println(result1); System.out.println(result1);
// System.out.println(result2); // System.out.println(result2);
// Double b = (double) Math.abs(34-50); // Double b = (double) Math.abs(34-50);
// System.out.println(b); // System.out.println(b);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment