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
  • 相关阅读:
    目标检测——从RCNN到Faster RCNN 串烧
    论文阅读:SSD: Single Shot MultiBox Detector
    在stm32上使用Arduino IDE(神舟I号为例)
    低功耗STM32F411开发板(原理图+PCB源文件+官方例程+驱动等)
    arduino的IDE开发stm32的板子
    AltiumDesigner14.3.X系列软件安装及破解过程
    arduino-star-otto
    怎样成为一个高手
    我的ubuntu10.04网络设置(VirtualBox)
    ubuntu11.04下安装TCL及TK
  • 原文地址:https://www.cnblogs.com/windy3417/p/14534386.html
Copyright © 2011-2022 走看看