2017-09-22 14 views
-1

我正在做这个计算器使用System.Windows.Forms,每次我尝试做一个平方根,Cos,Sin或Tan操作,并按下Equals按钮它停止并告诉我'System.FormatException:输入字符串不在一个正确的格式“,我不知道为什么。为什么这个计算器给我'输入字符串格式不正确'错误?

这是我buttonEquals_Click事件:

private void buttonEquals_Click(object sender, EventArgs e) 
{ 
    double num2; 
    double answer; 

    num2 = double.Parse(textBoxResult.Text); 

    switch (theOperator) 
    { 
     case "+": 
      answer = resultValue + num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "-": 
      answer = resultValue - num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "×": 
      answer = resultValue * num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "÷": 
      answer = resultValue/num2; 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "sqrt": 
      answer = Math.Sqrt(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "exp": 
      answer = Math.Pow(resultValue, num2); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "sin": 
      answer = Math.Sin(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "cos": 
      answer = Math.Cos(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     case "tan": 
      answer = Math.Tan(resultValue); 
      textBoxResult.Text = answer.ToString(); 
      resultValue = 0; 
      break; 
     default: 
      answer = 0; 
      break; 
    } 
} 

,这是我SqrtButton_Click事件和DivisionButton_event(所以你可以看到,DivisionButton它的工作):

private void SqrtButton_Click(object sender, EventArgs e) 
{ 
    resultValue = resultValue + double.Parse(textBoxResult.Text); 
    theOperator = "sqrt"; 
    textBoxResult.Clear(); 
} 

private void DivisionButton_Click(object sender, EventArgs e) 
{ 
    resultValue = resultValue + double.Parse(textBoxResult.Text); 
    theOperator = "÷"; 
    textBoxResult.Clear(); 
} 

我会很感激的任何帮帮我。

编辑:唯一的例外是在trown:num2 = double.Parse(textBoxResult.Text);

+0

什么是调试器告诉你什么时候在'SqrtButtonClick'中设置断点?该值是否适合传递给'double.Parse'? 当您检查'resultValue'时,在''sqrt''的'case'中怎么办?是什么值适合传递给函数'sqrt'? –

+0

现在你有你的答案。 *输入字符串无效* –

+0

它没有到达下一行。它停在'num2 = double.Parse(textBoxResult.Text);'但是如果我把断点放在'case'中,它就会输入case。 –

回答

3

要去猜,当你尝试测试那些家伙,在textBoxResult是空的。请注意,您正在执行该行num2 = double.Parse(textBoxResult.Text);如果最近清除了textBoxResult,那么表单System.FormatException : Input string was not in a correct format(空字符串/ null不会被double.Parse解析为0.00)会产生问题

+0

谢谢你,我从Sqrt,Cos,Sin和Tan删除了'textBoxResult.Clear()',它工作正常!我感谢您的帮助。 –

+0

我在想,谁低估了这个答案! –

+0

我没有投票,但我会猜测,投票将是由于这一事实,这解释了*为什么*错误发生,但不是*如何防止它*(即一些讨论'double.TryParse( )'和/或首先验证'Text'属性)。 –