2013-09-27 49 views
2

我是C#的新手。我試圖製作一個計算器,但發生以下錯誤:輸入字符串在double.Parse中的格式不正確

輸入字符串格式不正確。

這是代碼的摘要:

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

如何字符串轉換爲雙類型?

回答

3

你想用這段代碼實現什麼?看來你的算法是錯誤的。

與其他人一樣說,這個代碼

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

由於您已清除上一行的文本框,因此解析轉換失敗。

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; 
} 
+1

'num!= null'?和'textBox1.Text = num;'?這會編譯? –

0

好像num2值應該從textbox2textbox1中獲取(要設置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更改和編輯此 取決於你的操作

5

還記得Parse方法是依靠操作系統的文化來執行轉換,因此要儘量更改您的代碼

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

您也可以考慮使用

double.TryParse 

方法更好的異常處理。