Commit f596f934 authored by yanzg's avatar yanzg

公式计算处理

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