Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入字符串在double.Parse中的格式不正确_C#_Calculator - Fatal编程技术网

C# 输入字符串在double.Parse中的格式不正确

C# 输入字符串在double.Parse中的格式不正确,c#,calculator,C#,Calculator,我是C#的新手。我正在尝试制作计算器,但出现以下错误: 输入字符串的格式不正确 以下是代码的摘要: double num1, num2, result; private void button14_Click(object sender, EventArgs e) { num1 = Convert.ToDouble(textBox1.Text); textBox1.Text = String.Empty; num2 = double.Parse(textBox1.Tex

我是C#的新手。我正在尝试制作计算器,但出现以下错误:

输入字符串的格式不正确

以下是代码的摘要:

double num1, num2, result;

private void button14_Click(object sender, EventArgs e)
{
    num1 = Convert.ToDouble(textBox1.Text);
    textBox1.Text = String.Empty;
    num2 = double.Parse(textBox1.Text);   **//ERROR OCCURED HERE**
    result = num1 - num2;
}

private void button13_Click(object sender, EventArgs e)
{
    num1 = Convert.ToDouble(textBox1.Text);
    textBox1.Text = String.Empty;
    num2 = System.Double.Parse(textBox1.Text);  **//ERROR OCCURED HERE**
    result = num1 + num2;
}

如何将字符串转换为双精度类型?

由于已清除前一行的文本框,解析转换失败

textBox1.Text = String.Empty;
num2 = double.Parse(textBox1.Text);
它将如何将String.Empty转换为Double? 这样做是不对的。 例如,如果单击“+”按钮,则必须检查是否已经有一个数字。如果是,则添加数字并显示结果:

Double num;
private void Add_Click(object sender, EventArgs e)
{

   If (num != null)
   {
    num == num + Convert.ToDouble(textBox1.Text);
   }
   else
   {
    num1 == Convert.ToDouble(textBox1.Text);
   } 
   textBox1.Text = num;
}

似乎应该从
textbox2
获取
num2
值,而不是
textbox1
(您正在将textbox1.text设置为空,并尝试再次将其解析为双精度)

也不要直接使用
Convert.ToDouble(textBox1.Text)
。如果用户键入非数值,代码将崩溃。首先检查它是否为有效数字,请始终使用
doube.TryPrase()


您的代码似乎很难理解按钮13和按钮14的用途

我将假设您尝试这样做:

bool ifNew = true;
double num1 ,num2,result;
private void Add_Click(object sender, EventArgs e))
{
   if(ifNew)
   {

    num1 =  Convert.ToDouble(textBox1.Text);
    textbox1.Clear();
    ifNew = false;
    result += num1;

   }
   else
   {
    num2 = Convert.ToDouble(textBox1.Text);
    textbox1.Clear();
    result += num2;
    num1 = 0D;
    num2 = 0D;
    ifNew = true;
   } 


}

private void Equals_Click(object sender, EventArgs e)
{
   textboxl.Text = string.Format("{0:N}",result);
}
或者可以在我的Convert.ToDouble中使用Double.Parse 这取决于你的操作,但我正在想象 如何执行添加操作您可以更改和编辑此
取决于您的操作

还要记住,解析方法依赖于操作系统的区域性来执行转换,因此请尝试将代码更改为

num2 = double.Parse(textBox1.Text, CultureInfo.InvariantCulture);

你也可以考虑使用

double.TryParse

用于更好地处理异常的方法。

您试图用这段代码实现什么?看来你的算法错了

就像其他人说的,这个代码

textBox1.Text = String.Empty;
num2 = double.Parse(textBox1.Text);
将引发异常,因为空字符串无法转换为双精度

所以,我想知道你为什么要重置你的字段。我想了一会儿,也许我知道你想做什么。假设您在TextBox1中键入一个数字。然后按“-”按钮进行减法,然后输入第二个数字以查看结果。是这样吗?如果是,您编写的代码将不会等待您的下一次输入

事实上,当您单击按钮时,它只会执行您编写的所有行。我会写这样的东西

double num1, num2, result;
string operation;

private void button14_Click(object sender, EventArgs e) //Minus Button
{
    if (textBox1.Text != String.Empty) //Added if statement to see if the textBox is empty
        num1 = Convert.ToDouble(textBox1.Text);
    else
        num1 = 0; //If textBox is empty, set num1 to 0
    textBox1.Text = String.Empty;
    operation = "-";
}

private void button13_Click(object sender, EventArgs e) //Equals Button
{
    if (textBox1.Text != String.Empty)
        num2 = Convert.ToDouble(textBox1.Text);
    else
        num2 = 0;
    if (operation == "-")
    {
        result = num1 - num2;
        textBox1.Text = Convert.ToString(result);
    }
    if (operation == "+")
    {
        //You got it
    }
    //And so on...
}

编辑:如果字符串为空,这将始终引发异常,因此我添加了一个控件。如果字符串为空,则值变为零。

num!=空值
?和
textBox1.Text=num?这会编译吗?
textBox1.Text = String.Empty;
num2 = double.Parse(textBox1.Text);
double num1, num2, result;
string operation;

private void button14_Click(object sender, EventArgs e) //Minus Button
{
    if (textBox1.Text != String.Empty) //Added if statement to see if the textBox is empty
        num1 = Convert.ToDouble(textBox1.Text);
    else
        num1 = 0; //If textBox is empty, set num1 to 0
    textBox1.Text = String.Empty;
    operation = "-";
}

private void button13_Click(object sender, EventArgs e) //Equals Button
{
    if (textBox1.Text != String.Empty)
        num2 = Convert.ToDouble(textBox1.Text);
    else
        num2 = 0;
    if (operation == "-")
    {
        result = num1 - num2;
        textBox1.Text = Convert.ToString(result);
    }
    if (operation == "+")
    {
        //You got it
    }
    //And so on...
}