C#实现计算公式从字符串到数字的转换

以下是类的实现代码,可以使用工具生成一个dll文件到时候加入引用就可以了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Drawing;
using System.Data.Common;
using System.Web.UI;
using System.IO;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Configuration.Internal;
using System.Configuration;

namespace HR.Common.Common
{
    public class sszone_StringToFloat
    {
        //计算公式的相关函数
        /// <summary>
        /// 把单个字符“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”转化为数字0、1、2、3、4、5、6、7、8、9
        /// </summary>
        /// <param name="nChart"></param>
        /// <returns></returns>
        public int ChartToInt(string nChart)
        {
            int Intd = Int32.Parse(nChart.ToString());
            return Intd;
        }
        /// <summary>
        /// 把字符串“123.456”转化为数字123.456
        /// </summary>
        /// <param name="nCharts"></param>
        /// <returns></returns>
        public float ChartsToFloat(string nCharts)
        {
            float realInt = 0;
            int chartslenght = 0;
            chartslenght = nCharts.Length;
            int DotAtIndex = 0;
            DotAtIndex = nCharts.IndexOf('.');
            if (DotAtIndex == -1)//没有小数点,是整数
            {
                for (int i = 0; i < chartslenght; i++)
                {
                    int tempint = 0;
                    tempint = ChartToInt(nCharts.ElementAt(i).ToString());
                    for (int j = chartslenght - 1 - i; j > 0; j--)
                    {
                        tempint = tempint * 10;
                    }
                    realInt += tempint;
                }
            }
            else//有小数点,是小数
            {
                for (int i = 0; i < DotAtIndex; i++)//整数部分
                {
                    int tempint = 0;
                    tempint = ChartToInt(nCharts.ElementAt(i).ToString());
                    for (int j = DotAtIndex - 1 - i; j > 0; j--)
                    {
                        tempint = tempint * 10;
                    }
                    realInt += tempint;
                }
                for (int i = DotAtIndex + 1; i < chartslenght; i++)//小数部分
                {
                    float tempint = 0;
                    tempint = ChartToInt(nCharts.ElementAt(i).ToString());
                    for (int j = chartslenght - i; j > 0; j--)
                    {
                        tempint = (float)(tempint * 0.1);
                    }
                    realInt += tempint;
                }
            }
            return realInt;

        }
        /// <summary>
        /// 计算两个数,浮点数,包括加减乘除运算
        /// </summary>
        /// <param name="nFirstNumber">第一个数</param>
        /// <param name="nSecondNumber">第二个数</param>
        /// <param name="nCharater">运算符号</param>
        /// <returns></returns>
        public float CaculateTwoNumber(float nFirstNumber, float nSecondNumber, string nCharater)
        {
            float nResult = 0;
            if (nCharater == "+")
            {
                nResult = nFirstNumber + nSecondNumber;
            }
            if (nCharater == "-")
            {
                nResult = nFirstNumber - nSecondNumber;
            }
            if (nCharater == "*")
            {
                nResult = nFirstNumber * nSecondNumber;
            }
            if (nCharater == "/")
            {
                nResult = nFirstNumber * nSecondNumber;
            }
            return nResult;
        }
        /// <summary>
        /// 根据传递进来的字符串,只含有数字和“*”或“/”符号,计算出结果
        /// </summary>
        /// <param name="nnumberstr">只含有数字和“*”或“/”符号的字符串</param>
        /// <returns></returns>
        public double ReturnMultAndDevResult(string nnumberstr)
        {
            double realResult = 0;
            ///查找运算符
            int nMultorDev = 0;//代表是乘法还是除法,0是乘法,1是除法
            nMultorDev = nnumberstr.IndexOf('*');
            if (nMultorDev <= 0)
            {
                nMultorDev = 1;//没有找到“*”,是除法
            }
            else
            {
                nMultorDev = 0;//找到“*”,是乘法
            }

            ///分割运算符和数字
            double FirstNumber = 0;
            double SecondNumber = 0;
            string FirstNumberString = "";
            string SecondNumberString = "";
            //int FirstNumberStringLength = 0;
            //int SecondNumberStringLength = 0;
            if (nMultorDev == 0)//乘法
            {
                string[] numberstringlistMult = nnumberstr.Split('*');
                FirstNumberString = numberstringlistMult[0].ToString();
                SecondNumberString = numberstringlistMult[1].ToString();
                //FirstNumberStringLength = FirstNumberString.Length;
                //SecondNumberStringLength = SecondNumberString.Length;

                ///转化为数字

                FirstNumber = ChartsToFloat(FirstNumberString);
                //FirstNumber = Double.Parse(FirstNumber.ToString());
                SecondNumber = ChartsToFloat(SecondNumberString);
                //SecondNumber = Double.Parse(SecondNumber.ToString());
                FirstNumber = Math.Round(FirstNumber, 2);
                SecondNumber = Math.Round(SecondNumber, 2);
                ///计算两个数字的运算结果

                realResult = FirstNumber * SecondNumber;
                realResult = Math.Round(realResult, 2);
            }
            else
            {
                string[] numberstringlistDev = nnumberstr.Split('/');
                FirstNumberString = numberstringlistDev[0].ToString();
                SecondNumberString = numberstringlistDev[1].ToString();
                ///转化为数字

                FirstNumber = ChartsToFloat(FirstNumberString);
                SecondNumber = ChartsToFloat(SecondNumberString);
                FirstNumber = Math.Round(FirstNumber, 2);
                SecondNumber = Math.Round(SecondNumber, 2);
                ///计算两个数字的运算结果

                realResult = FirstNumber / SecondNumber;
                realResult = Math.Round(realResult, 2);
            }


            return realResult;
        }

        /// <summary>
        /// 根据传递进来的字符串,只含有数字和“+”或“-”符号,计算出结果
        /// </summary>
        /// <param name="nnumberstr">只含有数字和“+”或“-”符号的字符串</param>
        /// <returns></returns>
        public float ReturnPlusAndCutResult(string nnumberstr)
        {
            float realResult = 0;
            ///查找运算符
            int nPlusAndCut = 0;//代表是加法还是减法,0是加法,1是减法
            nPlusAndCut = nnumberstr.IndexOf('+');
            if (nPlusAndCut <= 0)
            {
                nPlusAndCut = 1;//没有找到“-”,是减法
            }
            else
            {
                nPlusAndCut = 0;//找到“+”,是加法
            }

            ///分割运算符和数字
            float FirstNumber = 0;
            float SecondNumber = 0;
            string FirstNumberString = "";
            string SecondNumberString = "";
            //int FirstNumberStringLength = 0;
            //int SecondNumberStringLength = 0;
            if (nPlusAndCut == 0)//加法
            {
                string[] numberstringlistMult = nnumberstr.Split('+');
                FirstNumberString = numberstringlistMult[0].ToString();
                SecondNumberString = numberstringlistMult[1].ToString();
                //FirstNumberStringLength = FirstNumberString.Length;
                //SecondNumberStringLength = SecondNumberString.Length;

                ///转化为数字

                FirstNumber = ChartsToFloat(FirstNumberString);
                SecondNumber = ChartsToFloat(SecondNumberString);

                ///计算两个数字的运算结果

                realResult = FirstNumber + SecondNumber;
            }
            else
            {
                string[] numberstringlistDev = nnumberstr.Split('-');
                FirstNumberString = numberstringlistDev[0].ToString();
                SecondNumberString = numberstringlistDev[1].ToString();
                ///转化为数字

                FirstNumber = ChartsToFloat(FirstNumberString);
                SecondNumber = ChartsToFloat(SecondNumberString);

                ///计算两个数字的运算结果

                realResult = FirstNumber - SecondNumber;
            }


            return realResult;
        }

        /// <summary>
        /// 返回括号里面的内容,可能含有加法、减法、乘法和除法,但是没有括号
        /// </summary>
        /// <param name="nCharaterString"></param>
        /// <returns></returns>
        public string FindOutsideStringInBrackets(string nCharaterString)
        {
            string ResultString = "";
            int startindex = 0;
            int endindex = 0;
            int substartindex = 0;
            int subendindex = 0;
            int countBrackets = 0;
            int exitid = 0;
            int strlenght = 0;
            strlenght = nCharaterString.Length;
            exitid = nCharaterString.IndexOf('(');
            if (exitid != -1)//有括号在字符串里
            {
                startindex = nCharaterString.IndexOf('(');
                endindex = nCharaterString.IndexOf(')');
                string subCharaterstring = nCharaterString.Substring(startindex, endindex - startindex);
                strlenght = subCharaterstring.Length;
                for (int curindex = 0; curindex < strlenght; )//得到左括号的个数
                {
                    subCharaterstring = subCharaterstring.Substring(curindex);
                    strlenght = subCharaterstring.Length;
                    substartindex = subCharaterstring.IndexOf('(');
                    if (substartindex != -1)
                    {
                        countBrackets++;
                        curindex = substartindex + 1;

                    }
                    else
                    {
                        curindex++;
                    }

                }
                subCharaterstring = nCharaterString.Substring(endindex);
                strlenght = subCharaterstring.Length;
                //while (countBrackets > 0)//根据左括号的个数查找到对应的右括号的序号
                //{
                for (int curindex = 0; curindex < strlenght && countBrackets > 0; )
                {
                    subCharaterstring = subCharaterstring.Substring(curindex);
                    strlenght = subCharaterstring.Length;
                    subendindex = subCharaterstring.IndexOf(')');
                    if (subendindex != -1)
                    {
                        countBrackets--;
                        curindex = subendindex + 1;
                        endindex += subendindex + 1;//找到右括号,跳转增加
                    }
                    else
                    {
                        curindex++;
                        endindex++;//没有找到括号,逐个增加
                    }

                }

                //}               
                ResultString = nCharaterString.Substring(startindex + 1, endindex - 1 - startindex - 1);
                ResultString = FindOutsideStringInBrackets(ResultString);//递归调用函数
                return ResultString;
            }
            else      //没有括号在字符串里
            {
                ResultString = nCharaterString;
                return ResultString;
            }

        }
        /// <summary>
        /// 返回括号里的字符串的结果的字符串
        /// </summary>
        /// <param name="nstrBrackets"></param>
        /// <returns></returns>
        public string ReturnStringInBrackets(string nstrBrackets)
        {
            char[] FourArr = { '+', '-', '*', '/' };
            int Fourcount = 0;
            Fourcount = nstrBrackets.IndexOfAny(FourArr);
            if (Fourcount < 0)
            {
                return nstrBrackets;
            }
            string[] stroutPandC = nstrBrackets.Split('+', '-');
            int stritemcount = stroutPandC.Length;//记录有多少个加减号+1
            string strCharatersIndexList = "";
            int strlength = nstrBrackets.Length;
            string tempstr = "";
            tempstr = nstrBrackets.ToString();
            char[] strchars = { '+', '-' };
            for (int indexid = 0; indexid < strlength; )//找出+号和-号的位置,记录+号和-号的顺序
            {
                int tempid = 0;
                tempid = tempstr.IndexOfAny(strchars);
                if (tempid > 0)
                {

                    if (strCharatersIndexList == "")
                    {
                        strCharatersIndexList += tempstr.ElementAt(tempid).ToString();//记录下符号是哪个符号
                    }
                    else
                    {
                        strCharatersIndexList += "|";
                        strCharatersIndexList += tempstr.ElementAt(tempid).ToString();
                    }
                    tempstr = tempstr.Substring(tempid + 1);
                    indexid = tempid;
                }
                else
                {
                    break;
                }

            }
            int strChartatersIndexListLength = 0;
            strChartatersIndexListLength = (strCharatersIndexList.Length + 1) / 2;//运算符的个数
            string[] strChartatersIndexListArry = strCharatersIndexList.Split('|');
            string tempMDresultstr = "";//保存最后的结果,运算过程中也会用到
            for (int indexid = 0; indexid < stritemcount; indexid++)// 替换含有*、/号的字符串
            {

                if (stroutPandC[indexid].ToString().IndexOf('*') > 0 || stroutPandC[indexid].ToString().IndexOf('/') > 0)//存在乘除运算
                {
                    char[] MDcharArr = { '*', '/' };
                    int strMDlength = stroutPandC[indexid].Length;
                    //分割*、/符号,保存数字
                    string[] strMDlist = stroutPandC[indexid].ToString().Split(MDcharArr);
                    //记录数字个数
                    int strMDListLength = (strMDlist.Length + 1) / 2;
                    //记录*、/符号的位置
                    string strMDindexlist = "";
                    string tempMDstr = "";
                    tempMDstr = stroutPandC[indexid].ToString();
                    for (int mdindexid = 0; mdindexid < strMDlength; )//找出*、/的位置
                    {
                        int mdtempid = 0;
                        mdtempid = tempMDstr.IndexOfAny(MDcharArr);
                        if (mdtempid > 0)
                        {

                            if (strMDindexlist == "")
                            {
                                strMDindexlist += tempMDstr.ElementAt(mdtempid).ToString();//顺序记录下符号是哪个符号
                            }
                            else
                            {
                                strMDindexlist += "|";
                                strMDindexlist += tempMDstr.ElementAt(mdtempid).ToString();
                            }
                            tempMDstr = tempMDstr.Substring(mdtempid + 1);
                            mdindexid = mdtempid;
                        }
                        else
                        {
                            break;
                        }

                    }
                    //根据数字和*、/符号的顺序位置,计算出结果
                    tempMDresultstr = "";
                    string tempMDresultinstr = "";
                    double tempMDresult = 0;
                    int strMDindexlistLength = (strMDindexlist.Length + 1) / 2;
                    string[] strMDindexlistArry = strMDindexlist.Split('|');
                    for (int strMDindexlistid = 0; strMDindexlistid < strMDindexlistLength; strMDindexlistid++)
                    {
                        if (strMDindexlistid == 0)
                        {
                            tempMDresultstr = strMDlist[0].ToString();
                        }
                        else
                        {
                            //tempMDresultstr = strMDlist[strMDindexlistid + 1].ToString();
                        }
                        tempMDresultinstr = tempMDresultstr + strMDindexlistArry[strMDindexlistid].ToString() + strMDlist[strMDindexlistid + 1].ToString();
                        tempMDresult = ReturnMultAndDevResult(tempMDresultinstr);
                        tempMDresultstr = tempMDresult.ToString();//运算结果
                    }
                    stroutPandC[indexid] = tempMDresultstr;
                    if (stritemcount <= 0)
                    {
                        return tempMDresultstr.ToString();//运算结果
                    }
                }
                else//没有乘除,只有加减运算
                {

                }
            }

            //根据数字和+、-符号的顺序位置,计算出结果
            string tempPCresultinstr = "";
            float tempPCresult = 0;
            //int strPCindexlistLength = strCharatersIndexList.Length;
            for (int strPCindexlistid = 0; strPCindexlistid < strChartatersIndexListLength; strPCindexlistid++)
            {
                if (strPCindexlistid == 0)
                {
                    tempMDresultstr = stroutPandC[0].ToString();
                }
                else
                {
                    //tempMDresultstr = strMDlist[strMDindexlistid + 1].ToString();
                }


                tempPCresultinstr = tempMDresultstr + strChartatersIndexListArry[strPCindexlistid].ToString() + stroutPandC[strPCindexlistid + 1].ToString();
                tempPCresult = ReturnPlusAndCutResult(tempPCresultinstr);
                tempMDresultstr = tempPCresult.ToString();//运算结果
            }
            return tempMDresultstr.ToString();//运算结果

        }

        /// <summary>
        /// 返回添加括号后的公式字符串
        /// </summary>
        /// <param name="nInString"></param>
        /// <returns></returns>
        public string ReturnAddBracketsString(string nInString)
        {
            //nInString = "(" + nInString + ")";
            string OutString = "";
            char[] BracketsArr = { '(', ')' };
            char[] FourCharatersArr = { '+', '-', '*', '/' };
            char[] TowCharatersArr = { '+', '-' };
            char[] NFourCharatersArr = { '+', '-', '(', ')' };
            char[] MDTowCharatersArr = { '*', '/' };
            int InStringLength = nInString.Length;
            //int FirstNFIndex = 0;
            //int SecondNFIndex = 0;
            //int IsExistNFIndex = -2;
            string[] InStringSplitNFourArr = nInString.Split(NFourCharatersArr);
            int InStringSplitNFourArrLength = InStringSplitNFourArr.Length;
            string InStringSplitNFourArrCharaters = "";
            string tempInStringSplitNFourArrCharaters = nInString;
            for (int tempindstringsplitid = 0; tempindstringsplitid < InStringLength; )//保存分割的符号
            {
                tempInStringSplitNFourArrCharaters = tempInStringSplitNFourArrCharaters.Substring(tempindstringsplitid);
                int elementid = tempInStringSplitNFourArrCharaters.IndexOfAny(NFourCharatersArr);
                if (elementid >= 0)
                {
                    if (InStringSplitNFourArrCharaters == "")
                    {
                        InStringSplitNFourArrCharaters = tempInStringSplitNFourArrCharaters.ElementAt(elementid).ToString();
                    }
                    else
                    {
                        InStringSplitNFourArrCharaters += "|" + tempInStringSplitNFourArrCharaters.ElementAt(elementid).ToString();
                    }
                    tempindstringsplitid = elementid + 1;
                }
                else
                {
                    tempindstringsplitid = InStringLength;
                }

            }
            string[] InStringSplitNFourArrCharatersArr = InStringSplitNFourArrCharaters.Split('|');
            int InStringSplitNFourArrCharatersLength = InStringSplitNFourArrCharatersArr.Length;

            for (int CKindexid = 0; CKindexid < InStringSplitNFourArrLength; CKindexid++)//添加括号
            {

                if (InStringSplitNFourArr[CKindexid].ToString().Length <= 0)
                {
                    continue;
                }
                char Mult;
                Mult = InStringSplitNFourArr[CKindexid].ToString().ElementAt(0);
                if (Mult == '*' || Mult == '/')
                {
                    int rightcout = 0;
                    //int leftindexid = -1;
                    int firstleftindexid = -1;
                    string pertempstring = "";
                    for (int perid = CKindexid - 1; perid >= 0; perid--)
                    {
                        int tempindexid = InStringSplitNFourArr[perid].IndexOf(')');
                        if (tempindexid > 0)
                        {
                            rightcout++;
                        }
                        int templeftindexid = InStringSplitNFourArr[perid].IndexOf('(');
                        if (templeftindexid >= 0)
                        {
                            rightcout--;
                            if (rightcout == 0)
                            {
                                firstleftindexid = perid;
                                break;
                            }
                        }
                    }

                    if ((firstleftindexid - rightcout) >= 0)
                    {
                        int MDcount = InStringSplitNFourArr[CKindexid].ToString().Split(MDTowCharatersArr).Length;
                        //插入第一个“(”
                        pertempstring = InStringSplitNFourArr[firstleftindexid - rightcout].ToString();
                        pertempstring = pertempstring.Insert(0, "(");
                        InStringSplitNFourArr[firstleftindexid - rightcout] = pertempstring;

                        //插入最后“)”
                        pertempstring = InStringSplitNFourArr[CKindexid].ToString();
                        int nextlength = InStringSplitNFourArr[CKindexid].ToString().Length;
                        pertempstring = pertempstring.Insert(nextlength, ")");
                        InStringSplitNFourArr[CKindexid] = pertempstring;

                        string tempbackstring = "";
                        int perid = InStringSplitNFourArr[CKindexid].ToString().Length - 1;
                        for (int indexid = 0; indexid < MDcount - 1; indexid++)
                        {
                            //循环插入“(”
                            pertempstring = InStringSplitNFourArr[firstleftindexid - rightcout].ToString();
                            pertempstring = pertempstring.Insert(0, "(");
                            InStringSplitNFourArr[firstleftindexid - rightcout] = pertempstring;

                            //循环插入“)”
                            tempbackstring = InStringSplitNFourArr[CKindexid].ToString().Substring(0, perid);
                            perid = tempbackstring.LastIndexOfAny(MDTowCharatersArr);
                            tempbackstring = InStringSplitNFourArr[CKindexid].ToString();
                            tempbackstring = tempbackstring.Insert(perid, ")");
                            InStringSplitNFourArr[CKindexid] = tempbackstring;
                        }


                    }

                }
                else
                {
                    if (InStringSplitNFourArr[CKindexid].ToString().Length >= 3)//至少有5个元素,3个数字和2个符号
                    {
                        string[] tempCKArr = InStringSplitNFourArr[CKindexid].ToString().Split(MDTowCharatersArr);
                        int tempCKArrLength = tempCKArr.Length;
                        string savetempstring = InStringSplitNFourArr[CKindexid].ToString();
                        if (tempCKArrLength >= 2)//至少有3个元素,3个数字
                        {
                            int addcount = 0;
                            for (int addindexid = 2; addindexid < tempCKArrLength; addindexid++)
                            {
                                int insertindexlength = 0;
                                for (int addcountid = 0; addcountid < addindexid; addcountid++)
                                {
                                    insertindexlength += tempCKArr[addcountid].ToString().Length;
                                    insertindexlength += 1;
                                }
                                savetempstring = savetempstring.Insert(0, "(");
                                savetempstring = savetempstring.Insert(insertindexlength + addcount, ")");
                                addcount += 2;
                            }
                            savetempstring = savetempstring.Insert(0, "(");
                            int savetempstringlength = savetempstring.Length;
                            savetempstring = savetempstring.Insert(savetempstringlength, ")");
                            InStringSplitNFourArr[CKindexid] = savetempstring;
                        }

                    }
                }


            }
            string resultstr = "";
            string tempresult = "";
            for (int addindexid = 0; addindexid < InStringSplitNFourArrCharatersLength; addindexid++)
            {
                if (addindexid == 0)
                {
                    if (InStringSplitNFourArrLength <= 1)
                    {
                        tempresult = InStringSplitNFourArr[0].ToString();
                    }
                    else
                    {
                        tempresult = InStringSplitNFourArr[0].ToString() + InStringSplitNFourArrCharatersArr[addindexid].ToString() + InStringSplitNFourArr[1].ToString();
                    }
                    
                    continue;
                }
                else
                {
                    resultstr = tempresult + InStringSplitNFourArrCharatersArr[addindexid].ToString() + InStringSplitNFourArr[addindexid + 1].ToString();
                    tempresult = resultstr;
                    continue;
                }
                //resultstr = tempresult + InStringSplitNFourArrCharatersArr[addindexid].ToString() + InStringSplitNFourArr[addindexid + 1].ToString();
                //tempresult = resultstr;

            }
            //resultstr = resultstr.Insert(0, "(");
            //int resultstrlength = resultstr.Length;
            //resultstr = resultstr.Insert(resultstrlength, ")");
            //OutString = resultstr;
            tempresult = tempresult.Insert(0, "(");
            int tempresultstrlength = tempresult.Length;
            tempresult = tempresult.Insert(tempresultstrlength, ")");
            OutString = tempresult;
            return OutString;
        }

        /// <summary>
        /// 循环调用该函数,传入括号的内容,返回所有运算的最总结果字符串
        /// </summary>
        /// <param name="nInString">括号内的内容,包括最外围的括号</param>
        /// <param name="nStartIndex">开始位置</param>
        /// <param name="nEndIndex">结束位置</param>
        /// <returns></returns>
        public string ReturnFinalResultString(string nInString, int nStartIndex, int nEndIndex)
        {
            string TempResultString = "";
            int StartIndexLeft = 0;
            int EndIndexRight = 0;
            //int TempIndex = 0;
            char LeftBracket = '(';
            char RightBracket = ')';
            char[] FourCharArr = { '+', '-', '*', '/' };
            int InStringLength = 0;
            string SubLeftInString = "";
            //int SubLeftInStringLength = 0;
            string tempString = "";
            //float TempResult = 0;
            string TempSubString = "";

            InStringLength = nInString.Length;
            SubLeftInString = nInString.Substring(0, InStringLength);
            EndIndexRight = SubLeftInString.IndexOf(RightBracket);
            tempString = SubLeftInString.Substring(0, EndIndexRight);
            StartIndexLeft = tempString.LastIndexOf(LeftBracket);
            if (StartIndexLeft >= 0 || EndIndexRight >= 0)
            {
                if (StartIndexLeft >= 0)
                {
                    TempSubString = nInString.Substring(StartIndexLeft + 1, EndIndexRight - StartIndexLeft - 1);//取出括号内的内容
                    TempResultString = ReturnStringInBrackets(TempSubString);//返回括号内的结果
                    TempSubString = nInString.Remove(StartIndexLeft, EndIndexRight - StartIndexLeft + 1);
                    TempSubString = TempSubString.Insert(StartIndexLeft, TempResultString);

                    char[] TowBracketsArr = { '(', ')' };
                    int count = TempSubString.IndexOfAny(TowBracketsArr);
                    if (count >= 0)
                    {
                        TempSubString = ReturnFinalResultString(TempSubString, 0, 0);//递归调用
                    }
                }
                
            }
            TempResultString = TempSubString;
            //for (int indexid = 0; indexid < InStringLength; indexid++)
            //{

            //}
            return TempResultString;
        }
        //公式的计算算法结束//
    }
}

  

转载于:https://www.cnblogs.com/sszjone/archive/2011/11/13/2247079.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
因各个项目中需要使用根据字符串计算数值,这里写出一个算法,专门计算字符串。配有大量常用公式。只有一个人方法,直接调用即可。 类名:CustomMath 函数名:Calculations(string value) 说明:求解算式表达式字符串的值 表达式中包含的符号或函数: truncate, ceiling,floor,round,log10, sign,sinh,sqrt, asin,atan,cosh, tanh, sin,cos,tan ,abs,acos, exp,log,max,min,pow,mod,+,-,*,/,',',(,) 函数说明:(不区分大小写) truncate(num) 计算指定数的整数部分 truncate(1.23)=1 ceiling (num) 返回大于或等于指定的双精度浮点数的最小整数值 ceiling(1.23)=2 floor(num) 返回小于或等于指定双精度浮点数的最大整数 floor(1.23)=1 round(num) 将双精度浮点值舍入为最接近的整数值 round(1.23)=1 round(num,num1) 将小数值按指定的小数位数舍入 round(1.23,1)=1.2 log10(num) 返回指定数字以 10 为底的对数 log10(10)=1 sign(num) 返回表示数字符号的值 sign(1.23)=1 sinh(num) 返回指定角度的双曲正弦值 sinh(1.23)=1.5644 sqrt(num) 返回指定数字的平方根 sqrt(9)=3 sqrt(num,num1) 返回指定数字的num1根 sqrt(27,3)=3 asin(num) 返回正弦值为指定数字的角度 asin(0.5)=PI/6 atan(num) 返回正切值为指定数字的角度 atan(1)=45 cosh(num) 返回指定角度的双曲余弦值 cosh(1.23)=1.8567 tanh(num) 返回指定角度的双曲正切值 tanh(1.23)=0.8425 sin(num) 返回指定角度的正弦值 sin(PI/6)=0.5 cos(num) 返回指定角度的余弦值 sin(PI/3)=0.5 tan(num) 返回指定角度的余切值 sin(PI/4)=1 abs(num) 返回数字的绝对值 abs(-12)=12 acos(num) 返回余弦值为指定数字的角度 acos(0.5)=PI/3 exp(num) 返回 e 的指定次幂 exp(1)=2.718 log(num) 返回指定数字的自然对数(底为 e) log(e)=1 log(num,num1) 返回指定数字在使用指定底时的对数 log(e,e)=1 max(num,um1) 返回最大值 max(1,2)=2 min(num,num1) 返回最小值 min(1,2)=1 pow(num,num1) 返回指定数字的指定次幂 pow(2,2)=4 mod(num,num1) 返回余数 mod(3,2)=1 常量: PI 值:3.14159265358979323846 E 值:2.7182818284590452354 YEAR 值:当前年份 MONTH 值:当前月份 DAY 值: 当前日 HOUR 值:当前时 MINUTE 值:当前分 SECOND 值:当前秒 RANDOM 值:一个随机数(0-1 之间) 实例 系统计算:1+2*3/4-0.5=2 函数计算:1+2*3/4-0.5=2 调用方式:CustomMath.Calculations("1+2*3/4-0.5") 系统计算:(1+2)*3/4-0.5=1.75 函数计算:(1+2)*3/4-0.5=1.75 调用方式:CustomMath.Calculations("(1+2)*3/4-0.5") 系统计算:(sin(pi)+sqrt(3+5*7+(2+8/4*5+2)))/6=1.20185042515466 公式计算:(sin(pi)+sqrt(3+5*7+(2+8/4*5+2)))/6=1.20185042515466 调用方式:CustomMath.Calculations("(sin(pi)+sqrt(3+5*7+(2+8/4*5+2)))/6") 系统计算:sin(pow(3,2)/4)+3.5-9*sqrt(81)=-76.7219268031121 函数计算:sin(pow(3,2)/4)+3.5-9*sqrt(81)=-76.7219268031121 调用方式:CustomMath.Calculations("sin(pow(3,2)/4)+3.5-9*sqrt(81)")

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值