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

我是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; } 

如何将字符串转换为double类型?

你想用这段代码实现什么目标? 看来你的algorythm是错误的。

像其他人说的,这段代码

 textBox1.Text = String.Empty; num2 = double.Parse(textBox1.Text); 

将抛出exception,因为空字符串无法转换为Double!

所以,我想知道你为什么重置你的领域。 我想了一会儿,也许我得到了你想做的事。 假设您在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... } 

编辑:如果字符串为空,这将始终抛出exception,所以我添加了一个控件。 如果字符串为空,则值变为零。

还要记住,Parse方法依赖于操作系统的文化来执行转换,因此请尝试将代码更改为

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

您也可以考虑使用

 double.TryParse 

更好的exception处理方法。

由于您已清除上一行的文本框,因此Parse转换失败。

 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而不是textbox1获取num2值(您将textbox1.text设置为并尝试将其解析为再次加倍)

 //You are setting textbox1 to empty textBox1.Text = String.Empty; //here trying to parse it to double num2 = double.Parse(textBox1.Text); 

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

 double num1; double.TryParse(textBox1.Text, out num1); 

您的代码似乎很难理解使用button_13和button_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它取决于你的操作,但我可视化如何做添加操作你可以改变和编辑这取决于你的操作