日期:2014-05-17  浏览次数:20399 次

怎样计算一个字符串公式的值?
式子:string str = "a*(b-c)";
float a=2,b=10,c=9.5;

做一个替换后将str变成:str="2*(10-9.5)";
怎么得到真正的值1呢?

------解决方案--------------------
这个你得 自己写一套解析的方法
------解决方案--------------------
LS 说的对,你要自己写解析方法,这个就像做复杂的四则运算一样,早起这中算法很难得,看你小时候的计算器就知道了,现在 很简单了,你查下,很多资料的,如果 是对称的,可以考虑用栈
------解决方案--------------------
C# code

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "a * (b - c)";
            string str1 = "2*(10-9.5)";
            string str2 = Compute(str1);
            Console.WriteLine(str);
            Console.WriteLine(str1);
            Console.WriteLine(str2);
            Console.ReadLine();
        }

        static string Compute(string str)
        {
            string a = str.Substring(0,str.IndexOf('*'));
            string b = str.Substring(str.IndexOf('(')+1,str.IndexOf('-')-str.IndexOf('(')-1);
            string c = str.Substring(str.IndexOf('-')+1, str.IndexOf(')') - str.IndexOf('-') - 1);
            double temp = Convert.ToDouble(a) * (Convert.ToDouble(b) - Convert.ToDouble(c));;
            return Convert.ToString(temp);
        }
    }

------解决方案--------------------
你这不科学啊,,,比较死
探讨
C# code


using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
……

------解决方案--------------------
放到查询分析器里面执行多直接,或者写到存储过程里专门负责此类逻辑,项目里面封装好方法,直接调用,传个字符串类型的参数就ok
------解决方案--------------------
string str = Convert.ToDecimal(a)*(Convert.ToDecimal(b)-Convert.ToDecimal(c)).ToString();
------解决方案--------------------
好方法。。
探讨
放到查询分析器里面执行多直接,或者写到存储过程里专门负责此类逻辑,项目里面封装好方法,直接调用,传个字符串类型的参数就ok