//'=SY("6301")-SY("1221") decimal CalcFormula(int lineNo, string formula) { if (string.IsNullOrEmpty(formula)) { return(0); } if (!formula.StartsWith("=")) { return(0); } List <string> lstMethod = CommonUtils.MatchPattern(formula, "(SY|C|SJY|SL)"); if (lstMethod.Count == 0) { return(0); } List <string> lstParams = CommonUtils.MatchPattern(formula, "(?<=\")[^\"^(^)]*(?=\")"); List <string> lstOpratio = CommonUtils.MatchPattern(formula, "(\\+|\\-|\\*|/)"); if (lstMethod.Count != lstParams.Count) { throw new FinanceException(FinanceResult.IMPERFECT_DATA, "公式错误"); } decimal result = 0M; for (int i = 0; i < lstMethod.Count; i++) { var param = lstParams[i]; var ids = SampleCalculator.GetAccountSubjectIds(m_lstAso, param); if (ids.Count == 0) { continue; } var method = lstMethod[i]; var amount = CalcMethod(method, ids); if (i > 0) { result = SampleCalculator.CalcOpration(result, lstOpratio[i - 1], amount); } else { result = amount; } } logger.Debug("CalcFormula : [{0}]{1}{2}", lineNo, result, formula); return(result); }
string Calc(string formula) { if (string.IsNullOrEmpty(formula)) { return(""); } if (!formula.StartsWith("=")) { return(formula); } List <string> lstMethod = CommonUtils.MatchPattern(formula, "(Y|C|JY|DC|DY)"); List <string> lstParams = CommonUtils.MatchPattern(formula, "(?<=\")[^\"^(^)]*(?=\")"); List <string> lstOpratio = CommonUtils.MatchPattern(formula, "(\\+|\\-|\\*|/)"); if (lstMethod.Count != lstParams.Count) { throw new FinanceException(FinanceResult.IMPERFECT_DATA, "公式错误"); } if (lstMethod.Count != lstOpratio.Count + 1) { throw new FinanceException(FinanceResult.IMPERFECT_DATA, "公式错误"); } decimal result = 0M; for (int i = 0; i < lstMethod.Count; i++) { var param = lstParams[i]; var ids = SampleCalculator.GetAccountSubjectIds(m_lstAso, param); if (ids.Count == 0) { continue; } var method = lstMethod[i]; var amount = CalcMethod(method, ids); if (i > 0) { result = SampleCalculator.CalcOpration(result, lstOpratio[i - 1], amount); } else { result = amount; } } return(result.ToString("0.00")); }