zoukankan      html  css  js  c++  java
  • C# 字符串函数计算

    仅供参考:

    #region 字符串函数计算
            /// <summary>
            /// 字符串函数运算
            /// 格式1:@函数名(参数1,参数2...)
            /// 格式2:@函数名(参数1,参数2...)+@函数名(参数1,参数2...)-@函数名(参数1,参数2...)....
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            private decimal StringToFunction(string str)
            {
                decimal result = 0;
    
                //是否带有运算符
                if (Regex.IsMatch(str, @"[+|-|*|/]"))
                {
                    //替换所有运算符,方便分析函数(参数)
                    var newstr = Regex.Replace(str, @"[+|-|*|/]", "(*_*)");
                    //函数结果容器
                    List<decimal> list_decimal = new List<decimal>();
                    foreach (string hs in newstr.Split(new string[] { "(*_*)" }, StringSplitOptions.None).ToList())
                    {
                        var dec = GetData(hs);
                        list_decimal.Add(dec);
                    }
    
                    //运算符
                    var matches = Regex.Matches(str, @"[+|-|*|/]");
                    for (int de = 0; de < list_decimal.Count; de++)
                    {
                        if (de == 0)
                        {
                            result += list_decimal[de];
                        }
                        else
                        {
                            switch (matches[de - 1].Value)
                            {
                                case "+": result += list_decimal[de]; break;
                                case "-": result -= list_decimal[de]; break;
                                case "*": result *= list_decimal[de]; break;
                                case @"/": result /= list_decimal[de]; break;
                            }
                        }
                    }
                }
                else //不带运算符
                {
                    result = GetData(str);
                }
                return result;
            }
            /// <summary>
            /// 数据获取
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            private decimal GetData(string str)
            {
                decimal result = 0;
                //解析函数
                var modelFunction = GetFunction(str);
    
                switch (modelFunction.funname.ToLower())
                {
                    case "xj_je":
    
                        break;
                    case "jqy":
                        //result = JQY(modelFunction.parameter);
                        break;
                    case "-jqy":
                        //result = JQY(modelFunction.parameter);
                        break;
                    case "nc":
                        result = NC(modelFunction.parameter);
                        break;
                    case "ye":
                        result = YE(modelFunction.parameter);
                        break;
                }
                return result;
            }
            #endregion
    
    
    
            /// <summary>
            /// 获取函数名
            /// </summary>
            /// <param name="str">字符串</param>
            /// <returns></returns>
            private ModelFunction GetFunction(string str)
            {
                string funname = Regex.Replace(str, @"@|((.+))", "");
                List<string> parameter = new List<string>();
                var p = Regex.Matches(str, @"d+");
                for (int i = 0; i < p.Count; i++)
                {
                    parameter.Add(p[i].Value);
                }
                ModelFunction model = new ModelFunction()
                {
                    funname = funname,
                    parameter = parameter
                };
                return model;
            }
    
            private class ModelFunction
            {
                /// <summary>
                /// 函数名称
                /// </summary>
                public string funname { get; set; }
                /// <summary>
                /// 参数
                /// </summary>
                public List<string> parameter { get; set; }
            }
  • 相关阅读:
    Git安装(操作篇)
    Git安装
    ES6基础练习
    SVN的安装与搭建及使用
    解决SVN文件不显示绿色小钩图标问题
    混入(mixin)
    ref属性与props配置项
    docker-compose部署 Mysql 8.0 主从模式基于GTID
    项目统一处理
    Docker Compose实战
  • 原文地址:https://www.cnblogs.com/OleRookie/p/8441905.html
Copyright © 2011-2022 走看看