5

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

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

4

5 回答 5

19

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

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

您也可以考虑使用

double.TryParse

更好的异常处理方法。

于 2013-09-27T12:31:32.017 回答
4

你想用这段代码实现什么?看来您的算法是错误的。

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

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

将抛出异常,因为空字符串无法转换为 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...
}

编辑:如果字符串为空,这将总是抛出异常,所以我添加了一个控件。如果字符串为空,则值为零。

于 2013-09-27T12:42:55.687 回答
0

由于您已清除上一行的文本框,因此 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;
}
于 2013-09-27T11:45:38.700 回答
0

似乎num2应该从textbox2not获取值textbox1(您将 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);
于 2013-09-27T12:04:35.113 回答
0

您的代码似乎很难理解 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 这取决于您的操作,但我正在可视化如何执行添加操作,您可以更改和编辑这取决于您的操作

于 2013-09-27T12:13:35.130 回答