计算器 - 在计算中允许负数

时间:2013-10-30 21:38:18

标签: c# calculator

对于练习作业,我需要创建一个计算器,它可以:

  • 鸿沟
  • 添加
  • 减去
  • 处理小数
  • 处理负数,例如(2-3 = 5)

我已经使一切工作与处理负数分开了,我真的不知道如何做这样的事情,并认为你可能能够提供帮助。这是我目前的解决代码:

public decimal getResult(string equation)
{
   //parse a equation as a string and solve it
   List<string> numbers = input.Split(opSplit, StringSplitOptions.RemoveEmptyEntries).ToList<string>();
   List<string> operators = input.Split(numSplit, StringSplitOptions.RemoveEmptyEntries).ToList<string>();

   //remove any decimals from operators list
   for (int i = 0; i < operators.Count; i++)
   {
      if (operators[i] == ".")
      {
         operators.RemoveAt(i);
      }
   }

   //set total to first values in numbers then remove in from list
   decimal total = decimal.Parse(numbers[0]);
   numbers.Remove(total.ToString());

   int count = 0;

   foreach(string s in numbers) {
      decimal val = decimal.Parse(s);
      string current_operator = operators[count];
      MessageBox.Show(current_operator);
      switch (current_operator)
      {
         case "+":
            total += val;
         break;
         case "-":
            total -= val;
         break;
         case "x":
            total *= val;
         break;
         case "/":
            total /= val;
         break;
      }

      if (count != operators.Count-1)
      {
         count++;
      }
   }
   return total;
}

我的方程以这种格式输入。

  • 1 + 2-3 * 4/5

1 个答案:

答案 0 :(得分:3)

首先:现在你没有考虑到操作的顺序,这是一个非常糟糕的主意。

我假设你想做这样的事情:-3 + -5,对吗?

以下是您可以做出的一些假设:

  • 不要将初始值设置为等于第一个值

改为设置total = 0。这样,如果您从-5开始,那么您可以使用已经正确的等式0 - 5,并且没有初始值的麻烦。

  • 简化数学运算

-3 + -50 - 3 - 5相同。利用这一点:解析您的操作员并检查是否有两个操作员互相追随。如果你有这个:简化操作,你很高兴。

好的方法:

+-------------+
| op | op | = |
+-------------+
| +  | +  | + |
| +  | -  | - |
| -  | +  | - |
| -  | -  | + |
+-------------+