zoukankan      html  css  js  c++  java
  • 解析字符串公式并计算出结果

     /// <summary>
            /// 解析字符串公式并计算出结果
            /// </summary>
            /// <param name="year"></param>
            /// <param name="month"></param>
            /// <param name="formulaSring">字符串公式</param>
            /// <returns></returns>
            public decimal FormulaAmount(string year, string month, string formulaSring)
            {
    
                #region 运算符集合
                List<char> operatorChars = new List<char>();
                char[] formularCharacter = formulaSring.ToCharArray();
                foreach (var item in formularCharacter)
                {
                    if (item.ToString() == "+" || item.ToString() == "-")
                    {
                        operatorChars.Add(item);
                    }
                }
                #endregion
    
                #region 值集合
    
                List<decimal> formulaNumber = new List<decimal>();
    
                char[] delimiterChars = { '+', '-' };
                string[] words = formulaSring.Split(delimiterChars);
    
    
                foreach (var word in words)
                {
                    //逗号分割后,分别得到取值函数的参数
                    //即取数方法与科目编码
                    string[] formulaUnit = word.Split(',');
    
                    //取数方法字符串
                    FetchRegular fetchRegualar = (FetchRegular)Enum.Parse(typeof(FetchRegular), formulaUnit[0]);
    
                    //科目编码字符串
                    string accountCode = formulaUnit[1];
    
                    //调用取数方法,返回运算表达式中的数值
                    formulaNumber.Add(U8Amount(year, month, accountCode, fetchRegualar));
                }
                #endregion
    
                #region 组成计算式,并得出计算结果
                
                StringBuilder calculateExpress = new StringBuilder();
                for (int i = 0; i < formulaNumber.Count; i++)
                {
                    calculateExpress.Append(formulaNumber[i].ToString().Trim());
                    if (i < operatorChars.Count)
                    {
                        calculateExpress.Append(operatorChars[i].ToString().Trim());
                    }
    
    
                }
    
                DataTable dt = new DataTable();
                //如果值为0,则无法转换成decimal类型
                if (dt.Compute(calculateExpress.ToString(), "").ToString() == "0")
                {
                    return 0;
                }
                else
                {
                    return (decimal)dt.Compute(calculateExpress.ToString(), "");
                }
    
                #endregion
    
    
    
    
    
            }
    View Code
  • 相关阅读:
    java学习:字符串比较“==”与“equals”的差异及与c#的区别
    航空8联货运单的作用详解
    flash:二次贝塞尔曲线应用生成飞机路径示意图
    javascript:双链表插入排序
    javascript:算法笔记
    玩聚RT 加入对饭否的统计
    随手小记:创业瞎聊十点
    Python的win32serviceutil之疑似BUG
    撕书记忆法
    中文锐推榜优化·二
  • 原文地址:https://www.cnblogs.com/windy3417/p/14534386.html
Copyright © 2011-2022 走看看