• 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; }
            }
  • 相关阅读:
    IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilte
    Email营销相关名词解释:PEM,UCE,Optin,Double OptIn,Optout
    Lombok 使用在 IDEA 中进行 JUnit 测试的时候提示 variable log 错误
    到底应不应该使用 lombok
    Hibernate 元数据模型(MetaModel)提示类没有找到错误
    Java 9 缩小字符串( Compact String)
    Java 虚拟机的概念是怎么来的
    Discourse 自定义头部链接(Custom Header Links)
    Java 6 压缩字符串(Compressed String)
    Java 缩小字符串( Compact String)和 压缩字符串(Compressed String)
  • 原文地址:https://www.cnblogs.com/OleRookie/p/8441905.html
Copyright © 2020-2023  润新知