C# 如何使我的一位数计算器适应任何长度的任何数字(实数)
所以我有这个代码,我一直在尝试调整它,以适应任何数量的实数,似乎研究MSFT网站还没有奏效,所以我在这里作为我的最后手段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
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的新手:/