Commit f596f934 authored by yanzg's avatar yanzg

公式计算处理

parent 4959c2c5
...@@ -21,6 +21,8 @@ public class CalcHelper { ...@@ -21,6 +21,8 @@ public class CalcHelper {
private static final String REGEX_CALC_TAG = "[+\\-*/()]+"; private static final String REGEX_CALC_TAG = "[+\\-*/()]+";
private static final String EMPTY_CHAR = " "; private static final String EMPTY_CHAR = " ";
private static CalcHelper calcInstance = new CalcHelper();
/** /**
* 公式参数获取 * 公式参数获取
*/ */
...@@ -42,6 +44,18 @@ public class CalcHelper { ...@@ -42,6 +44,18 @@ public class CalcHelper {
* @return 运算后的结果 * @return 运算后的结果
*/ */
public static double calc(String formula, CalcParameter calcParameter) { public static double calc(String formula, CalcParameter calcParameter) {
return calcInstance.calRun(formula, calcParameter);
}
/**
* 计算公式
*
* @param formula 公式内容,支持括号、空格、数字、+、-、*、/、变量名,如: A * ( B + C )
* @param calcParameter 获取变量值
* @return 运算后的结果
*/
private double calRun(String formula, CalcParameter calcParameter) {
if (StringHelper.isEmpty(formula)) { if (StringHelper.isEmpty(formula)) {
return 0; return 0;
} }
...@@ -60,7 +74,7 @@ public class CalcHelper { ...@@ -60,7 +74,7 @@ public class CalcHelper {
* *
* @param formula 输入等式的右边 * @param formula 输入等式的右边
**/ **/
private static List<String> getVarNames(String formula) { private List<String> getVarNames(String formula) {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
//清理所有运算符,并且包含多个运算符号时,将多个运算符号当成一个运算符号处理 //清理所有运算符,并且包含多个运算符号时,将多个运算符号当成一个运算符号处理
String formulaTo = formula.replaceAll(REGEX_CALC_TAG, EMPTY_CHAR); String formulaTo = formula.replaceAll(REGEX_CALC_TAG, EMPTY_CHAR);
...@@ -82,7 +96,7 @@ public class CalcHelper { ...@@ -82,7 +96,7 @@ public class CalcHelper {
* @param calcParameter 获取变量值 * @param calcParameter 获取变量值
* @return 变量值 * @return 变量值
*/ */
private static Map<String, Double> getVarValues(List<String> varNames, CalcParameter calcParameter) { private Map<String, Double> getVarValues(List<String> varNames, CalcParameter calcParameter) {
// 获取所有的变量值 // 获取所有的变量值
Map<String, Double> varValues = new HashMap<>(); Map<String, Double> varValues = new HashMap<>();
for (String name : varNames) { for (String name : varNames) {
...@@ -102,7 +116,7 @@ public class CalcHelper { ...@@ -102,7 +116,7 @@ public class CalcHelper {
* @param varValues 变量值 * @param varValues 变量值
* @return * @return
*/ */
private static double calcProc(String formula, Map<String, Double> varValues) { private double calcProc(String formula, Map<String, Double> varValues) {
double ret = 0; double ret = 0;
if (formula.matches(REGEX_QUOT)) { if (formula.matches(REGEX_QUOT)) {
// 获取第一个括号和最后一个括号 // 获取第一个括号和最后一个括号
...@@ -129,7 +143,7 @@ public class CalcHelper { ...@@ -129,7 +143,7 @@ public class CalcHelper {
} else { } else {
ret = varValues.get(formula); ret = varValues.get(formula);
} }
System.out.println("公式: " + formula + " 值" + ret); // System.out.println("公式: " + formula + " 值" + ret);
return ret; return ret;
} }
...@@ -140,7 +154,7 @@ public class CalcHelper { ...@@ -140,7 +154,7 @@ public class CalcHelper {
* @param formula 公式 * @param formula 公式
* @return 匹配后的结果 * @return 匹配后的结果
*/ */
private static Matcher getMatcher(String regex, String formula) { private Matcher getMatcher(String regex, String formula) {
Pattern p = Pattern.compile(regex); Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(formula); Matcher matcher = p.matcher(formula);
if (!matcher.find()) { if (!matcher.find()) {
...@@ -149,7 +163,7 @@ public class CalcHelper { ...@@ -149,7 +163,7 @@ public class CalcHelper {
return matcher; return matcher;
} }
private static double calcItem(String flag, double a, double b) { private double calcItem(String flag, double a, double b) {
switch (flag) { switch (flag) {
case "+": case "+":
return a + b; return a + 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