【问题标题】:Input string was not in a correct format in double.Parse输入字符串在 double.Parse 中的格式不正确
【发布时间】:2013-10-03 16:48:48
【问题描述】:

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

【问题讨论】:

    标签: c# calculator


    【解决方案1】:

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

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

    你也可以考虑使用

    double.TryParse
    

    更好的异常处理方法。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案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;
        }
        

        【讨论】:

        • num != null ?和textBox1.Text = num;?这会编译吗?
        【解决方案4】:

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

        //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);
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            • 2013-08-22
            相关资源
            最近更新 更多