C# 如何使我的一位数计算器适应任何长度的任何数字(实数)

C# 如何使我的一位数计算器适应任何长度的任何数字(实数),c#,console-application,calculator,C#,Console Application,Calculator,所以我有这个代码,我一直在尝试调整它,以适应任何数量的实数,似乎研究MSFT网站还没有奏效,所以我在这里作为我的最后手段 char operation; String calculation; double num1, num2, ans; Console.WriteLine("Place your calculation in the form (x'symbol'y)"); calculation = Console.ReadLine(); num1 = double.Parse(calc

所以我有这个代码,我一直在尝试调整它,以适应任何数量的实数,似乎研究MSFT网站还没有奏效,所以我在这里作为我的最后手段

char operation;
String calculation;
double num1, num2, ans;

Console.WriteLine("Place your calculation in the form (x'symbol'y)");
calculation = Console.ReadLine();
num1 = double.Parse(calculation[0].ToString());
num2 = double.Parse(calculation[2].ToString());
operation = calculation[1];

switch (operation)
{
    case '+':
        ans = num1 + num2;
        Console.WriteLine(num1 + num2);
        break;
    case '-':
        ans = num1 - num2;
        Console.WriteLine(num1 - num2);
        break;
    case '/':
        ans = num1 / num2;
        Console.WriteLine(num1 / num2);
        break;
    case '*':
        ans = num1 * num2;
        Console.WriteLine(num1 * num2);
        break;
}

在代码的第七行
num2=double.Parse(计算[0].ToString())
您应该编写
num2=double.Parse(计算[2].ToString())
第二部分我仍在努力解决。

编辑:在我发布此内容时,您对其进行了更改。

以下是一个示例,说明如何使用正则表达式并遵循您提供的格式,使其适用于任何长度的数字。如评论中所述,Compute()是一种简单得多的工作方式

        char operation;
        string calculation;
        double num1, num2, ans;
        Regex validcheck = new Regex(@"^\d+([+]|[-]|[/]|[*])\d+$");
        Regex findnumber = new Regex(@"\d+");
        Regex findoperation = new Regex(@"([+]|[-]|[/]|[*])");

        Console.WriteLine("Place your calculation in the form (x'symbol'y)");

        calculation = Console.ReadLine();

        if (validcheck.IsMatch(calculation))
        {
            num1 = double.Parse(findnumber.Matches(calculation)[0].Value);
            num2 = double.Parse(findnumber.Matches(calculation)[1].Value);
            operation = char.Parse(findoperation.Match(calculation).Value);

            switch (operation)
            {
                case '+':
                    ans = num1 + num2;
                    Console.WriteLine(num1 + num2);
                    break;
                case '-':
                    ans = num1 - num2;
                    Console.WriteLine(num1 - num2);
                    break;
                case '/':
                    ans = num1 / num2;
                    Console.WriteLine(num1 / num2);
                    break;
                case '*':
                    ans = num1 * num2;
                    Console.WriteLine(num1 * num2);
                    break;
            }
        }
        else
        {
            Console.WriteLine("The operation you inserted has an invalid format");
        }
        Console.Read();

做了类似的事情,只是我只使用了一个正则表达式,然后为组捕获的数字和运算符编制索引

        char operation;
        String calculation;
        double num1, num2, ans;

        Console.WriteLine("Place your calculation in the form (x'symbol'y)");
        calculation = Console.ReadLine();
        Regex testRegex = new Regex(@"([0-9]*)([+-/*])([0-9]*)");
        var match = testRegex.Match(calculation);

        if (!match.Success)
        {
            Console.WriteLine("Invalid syntax");
            return;
        }

        num1 = double.Parse(match.Groups[1].Value);
        num2 = double.Parse(match.Groups[3].Value);
        operation = match.Groups[2].Value[0];

        switch (operation)
        {
            case '+':
                ans = num1 + num2;
                Console.WriteLine(num1 + num2);
                break;
            case '-':
                ans = num1 - num2;
                Console.WriteLine(num1 - num2);
                break;
            case '/':
                ans = num1 / num2;
                Console.WriteLine(num1 / num2);
                break;
            case '*':
                ans = num1 * num2;
                Console.WriteLine(num1 * num2);
                break;
        }

提示:string.Split()方法应该非常适合您的问题……简单:
decimal result=(decimal)(new DataTable().Compute(Console.ReadLine(),null))
;-)当您将对象类型的输出强制转换为double或decimal时,会引发异常,必须从字符串解析结果:
double result=double.Parse(new DataTable().Compute(Console.ReadLine(),null.ToString())@TimSchmelter@Innat3:那么最好使用
Convert.ToDecimal(..)
而不是字符串转换,因为字符串转换效率较低,还可能导致本地化问题。因此,存储
Compute
-生成一个
object
变量,然后使用
Convert.ToDecimal
@Tim Schmelter是的,也可以!我不知道它的效率更高,谢谢,我一秒钟前就知道了:)@innat3你不能使用像Substring和IndexOf这样的字符串方法吗?你的更好,我只是一个使用Regex的新手:/