运营商" - "不能应用于操作数" string"和"双" C#

时间:2017-01-04 01:49:43

标签: c#

在处理计算器时,我试图使用字符串和文本框中的双精度来得到答案,并在处理减法,乘法,除法和指数时遇到此错误:

  

"运营商" - "不能应用于操作数" string"和"加倍""

代码:

private void BtnEqual_Click(object sender, EventArgs e)
{
    OperationLbl.Text = "";
    switch (operation)
    {
        case "+":
            textBox1.Text = (results + Double.Parse(textBox1.Text).ToString());
            break;
        case "-":
            textBox1.Text = (results - Double.Parse(textBox1.Text).ToString());
            break;
        case "*":
            textBox1.Text = (results * Double.Parse(textBox1.Text).ToString());
            break;
        case "/":
            textBox1.Text = (results / Double.Parse(textBox1.Text).ToString());
            break;
        case "^":
            textBox1.Text = (results ^ Double.Parse(textBox1.Text).ToString());
            break;
    }
}

在尝试修补并解决此错误后,我无法有效地执行此操作。所以,如果你能够坚持,那将是伟大的,如果不是我明白的情况。

4 个答案:

答案 0 :(得分:2)

这个(和它一样)

 (results + Double.Parse(textBox1.Text).ToString());

应该是:

 (results + Double.Parse(textBox1.Text)).ToString();

您正在将文本解析为double,然后立即调用ToString()将其转换回字符串。您需要在末尾放置ToString()以将结果转换为字符串。

答案 1 :(得分:1)

假设resultsdouble,那么它是括号位置:

textBox1.Text = (results + Double.Parse(textBox1.Text).ToString());

应该是:

textBox1.Text = (results + Double.Parse(textBox1.Text)).ToString();

答案 2 :(得分:1)

我认为错误消息是自我解释的,您知道变量result的类型为double,错误消息表明"Operator "-" cannot be applied to operands "string" and "double""因此可以理解第二个操作数是字符串,从那里您可以得出结论.ToString()在此处创建问题。我想为你建议一个不同的方法;你可以这样做:

double currentNumber;
if (double.TryParse(textBox1.Text, out currentNumber))
{
    switch (operation)
    {
        case "+":
            textBox1.Text = (results + currentNumber).ToString();
            break;
        case "-":
            textBox1.Text = (results - currentNumber).ToString();
            break;
        case "*":
            textBox1.Text = (results * currentNumber).ToString();
            break;
        case "/":
            textBox1.Text = (results / currentNumber).ToString();
            break;
        case "^":
            textBox1.Text = (results ^ currentNumber).ToString();
            break;
    }
}
else
{
    textBox1.Text = "Invalid input";            
}

由于Double.Parse可能会在输入无效的情况下抛出FormatException,以避免您按照我的建议继续使用TryParse

答案 3 :(得分:0)

您正在ToString的返回值上调用Double.Parse。我很确定你想在算术运算的结果上调用ToString但是你的括号错了。