首页 文章

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

提问于
浏览
3

我是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类型?

5 回答

  • 0

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

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

    您也可以考虑使用

    double.TryParse
    

    更好的异常处理方法 .

  • 7

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

    像其他人说的,这段代码

    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...
    }
    

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

  • 0

    似乎 num2 值应该从 textbox2 取得 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);
    
  • 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它取决于你的操作,但我可视化如何做添加操作你可以改变和编辑这取决于你的操作

  • 3

    由于您已清除上一行的文本框,因此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;
    }
    

相关问题