【问题标题】:Why is this calculator giving me 'Input string was not in correct format' Error? [duplicate]为什么这个计算器给我“输入字符串格式不正确”错误? [复制]
【发布时间】:2017-09-22 23:24:28
【问题描述】:

我正在使用 System.Windows.Forms 做这个计算器,每次我尝试进行平方根、余弦、正弦或正切运算并点击 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();
}

如果有任何帮助,我将不胜感激。

编辑:异常出现在:num2 = double.Parse(textBoxResult.Text);

【问题讨论】:

  • 当您在SqrtButtonClick 中设置断点时,调试器会告诉您什么?该值是否适合传递给double.Parse?当您检查resultValue 时,在"sqrt"case 中呢?该值是否适合传递给函数sqrt
  • 现在你有答案了。 输入字符串无效
  • 它没有到达下一行。它在num2 = double.Parse(textBoxResult.Text); 处停止,但如果我将断点放在case for Division 中,它确实会进入案例。
  • @HernánCasillas 断点在 Visual Studio 中非常简单,它们是你的朋友。祝你好运!
  • @IanRay 谢谢,问题已得到解答。

标签: c# .net winforms exception calculator


【解决方案1】:

猜想当你尝试测试这些家伙时,textBoxResult 是空的。注意你正在执行num2 = double.Parse(textBoxResult.Text);这一行p>

【讨论】:

  • 谢谢,我从 Sqrt、Cos、Sin 和 Tan 中删除了 textBoxResult.Clear(),它成功了!感谢您的帮助。
  • 我想知道,谁对这个答案投了反对票!
  • 我没有投反对票,但我猜投反对票是因为这解释了错误发生的为什么,而不是如何发生以防止它(即讨论double.TryParse() 和/或首先验证Text 属性)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多