Commit 7e8d62a0 authored by yanzg's avatar yanzg

公式处理

parent d503db91
...@@ -103,6 +103,7 @@ public class CalcHelper { ...@@ -103,6 +103,7 @@ public class CalcHelper {
* @return * @return
*/ */
private static double calcProc(String formula, Map<String, Double> varValues) { private static double calcProc(String formula, Map<String, Double> varValues) {
double ret = 0;
if (formula.matches(REGEX_QUOT)) { if (formula.matches(REGEX_QUOT)) {
// 获取第一个括号和最后一个括号 // 获取第一个括号和最后一个括号
Pattern p = Pattern.compile(REGEX_QUOT); Pattern p = Pattern.compile(REGEX_QUOT);
...@@ -110,23 +111,9 @@ public class CalcHelper { ...@@ -110,23 +111,9 @@ public class CalcHelper {
if(!matcher.find()){ if(!matcher.find()){
throw new RuntimeException("正则表达式错误"); throw new RuntimeException("正则表达式错误");
} }
String left = matcher.group(1); double quotResult = calcProc(matcher.group(2), varValues);
String quot = matcher.group(2); String formulaTo = matcher.group(1) + quotResult + matcher.group(3);
String right = matcher.group(3); ret = calcProc(formulaTo,varValues);
double quotResult = calcProc(quot, varValues);
if (!StringHelper.isEmpty(left)) {
// 左边的值
double leftResult = calcProc(StringHelper.left(left, left.length() - 1), varValues);
// 左边和括号中的值计算
quotResult = calcItem(StringHelper.right(left, 1), leftResult, quotResult);
}
if (!StringHelper.isEmpty(right)) {
// 右边的值
double rightResult = calcProc(StringHelper.right(right, left.length() - 1), varValues);
// 左边和括号中的值计算
quotResult = calcItem(StringHelper.left(right, 1), quotResult, rightResult);
}
return quotResult;
} else if (formula.matches(REGEX_CALC_ADD_PLUS)) { } else if (formula.matches(REGEX_CALC_ADD_PLUS)) {
// 判断是否包含+-运算符号 // 判断是否包含+-运算符号
Pattern p = Pattern.compile(REGEX_CALC_ADD_PLUS); Pattern p = Pattern.compile(REGEX_CALC_ADD_PLUS);
...@@ -136,7 +123,7 @@ public class CalcHelper { ...@@ -136,7 +123,7 @@ public class CalcHelper {
} }
double leftResult = calcProc(matcher.group(1),varValues); double leftResult = calcProc(matcher.group(1),varValues);
double rightResult = calcProc(matcher.group(3),varValues); double rightResult = calcProc(matcher.group(3),varValues);
return calcItem(matcher.group(2), leftResult,rightResult); ret = calcItem(matcher.group(2), leftResult,rightResult);
} else if (formula.matches(REGEX_CALC_MULTIPLY_MOD)) { } else if (formula.matches(REGEX_CALC_MULTIPLY_MOD)) {
// 判断是否包含*/运算符号 // 判断是否包含*/运算符号
Pattern p = Pattern.compile(REGEX_CALC_MULTIPLY_MOD); Pattern p = Pattern.compile(REGEX_CALC_MULTIPLY_MOD);
...@@ -146,12 +133,14 @@ public class CalcHelper { ...@@ -146,12 +133,14 @@ public class CalcHelper {
} }
double leftResult = calcProc(matcher.group(1),varValues); double leftResult = calcProc(matcher.group(1),varValues);
double rightResult = calcProc(matcher.group(3),varValues); double rightResult = calcProc(matcher.group(3),varValues);
return calcItem(matcher.group(2), leftResult,rightResult); ret = calcItem(matcher.group(2), leftResult,rightResult);
} else if (formula.matches(REGEX_DOUBLE)) { } else if (formula.matches(REGEX_DOUBLE)) {
return StringHelper.toDouble(formula); ret = StringHelper.toDouble(formula);
} else { } else {
return varValues.get(formula); ret = varValues.get(formula);
} }
System.out.println("公式: " + formula + " 值" + ret);
return ret;
} }
private static double calcItem(String flag, double a, double b) { private static double calcItem(String flag, double a, double 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