2016-08-25 75 views
1

下面是代碼:輸入字符串的不正確的格式錯誤

public void calculations() 
{ 
    int value; 
    try 
    { 
     if ((string.IsNullOrEmpty(txtrate.Text)) || (string.IsNullOrEmpty(txttotalkm.Text))) 
     { 
      MessageBox.Show("Fill both the Values", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
     else if ((int.TryParse(txtrate.Text, out value)) && (int.TryParse(txttotalkm.Text, out value))) 
     { 
      int rate = int.Parse(txtrate.Text.Trim()); 
      int km = int.Parse(txttotalkm.Text.Trim()); 

      decimal gross = rate * km; 
      decimal NBT = (gross * 8/100); 
      decimal vat = ((gross + NBT) * 11/100); 
      decimal total = vat + NBT + gross; 

      string snbt = String.Format("{0:Rs 0.00}", NBT); 
      string svat = String.Format("{0:Rs 0.00}", vat); 
      string stotal = String.Format("{0:Rs 0.00}", total); 

      lblnbt.Visible = true; 
      lblnbt.Text = snbt; 
      lblvat.Visible = true; 
      lblvat.Text = svat; 

      lbltotal.Visible = true; 
      lbltotal.Text = stotal; 
      string ltnbt = lblnbt.Text.ToString(); 
      string ltvat = lblvat.Text.ToString(); 
      string lttotal = lbltotal.Text.ToString(); 

      int inbt = Convert.ToInt32(lblnbt.Text); 
      int ivat = Convert.ToInt32(lblvat.Text); 
      int itotal = Convert.ToInt32(lbltotal.Text); 

      //CreateWordDocument(@"C:\temp\test.docx", 
      //   @"C:\temp\new.docx"); 
      clear(); 
     } 
     else 
     { 
      MessageBox.Show("Wrong Values Please Check again", "Try Again", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      clear(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

運行程序時,它說:

輸入字符串的不正確的格式錯誤

我必須說我只是想編碼和學習,而不是專業人士,我只是無法找出問題。

試圖消除try...catch盒,看到了例外,它說的:

The Exception That Jumped out

如果沒有做到這一點更簡單的方法,只是讓我知道。

+0

你會在哪一行發生異常? –

+0

引起此問題的'int.Parse'使用'int.TryParse'來代替。希望你是第N個人提出這個問題 –

+0

@diiN_ @ int ivat = Convert.ToInt32(lblvat.Text); – Binku

回答

1

的錯誤是在這裏:

//snbt, svat and stotal are not valid integers, because they 
//are text formatted that start with "Rs"... 
string snbt = String.Format("{0:Rs 0.00}", NBT); 
string svat = String.Format("{0:Rs 0.00}", vat); 
string stotal = String.Format("{0:Rs 0.00}", total); 

lblnbt.Visible = true; 
lblnbt.Text = snbt; 
lblvat.Visible = true; 
lblvat.Text = svat; 

lbltotal.Visible = true; 
lbltotal.Text = stotal; 
string ltnbt = lblnbt.Text.ToString(); 
string ltvat = lblvat.Text.ToString(); 
string lttotal = lbltotal.Text.ToString(); 

//HERE the exception is triggered, because the "text" in the 
//Labels start with "Rs". 
int inbt = Convert.ToInt32(lblnbt.Text); 
int ivat = Convert.ToInt32(lblvat.Text); 
int itotal = Convert.ToInt32(lbltotal.Text); 

爲了解決這個問題,而不是從標籤再次轉換成整數時,爲什麼不直接使用NBT,增值稅和TOTAL?

或者更好,爲什麼你需要從標籤重新轉換爲整數?

+0

我該如何糾正它? 'string snbt = String.Format(「{0:Rs 0.00}」,NBT.ToString()); string svat = String.Format(「{0:Rs 0.00}」,vat.ToString()); string stotal = String.Format(「{0:Rs 0.00}」,total.ToString()); ' 是這樣的? – Binku

+0

問題是,您正在格式化要顯示的值,並且正試圖再次將它們從標籤轉換爲整數。你爲什麼做這個? – Jauch

+0

是我的壞不該做的,現在它的工作 – Binku

0

解析應始終保持錯誤的格式輸入作爲異常引發的原因。對於C#中的相同,有類似的清晰解決方案。

•如果您有一個字符串,並且您希望它始終是一個整數(例如,如果某個Web服務將字符串格式的整數交給您),則使用Int32.Parse()

•如果您要收集來自用戶的輸入,通常會使用Int32.TryParse(),因爲它允許您在用戶輸入無效輸入時更好地控制情況。

Convert.ToInt32()需要一個對象作爲參數,我相信它會調用Int32.TryParse()當它發現所取的參數中的對象是一個字符串

+0

你能告訴我代碼示例。對不起,因爲這麼小心:) – Binku

+0

看@Jauch共享的最後一個代碼片段。它會解決你的問題。順便說一下,你可以給我看一行你試圖執行的行 – Lara

0

如果你只允許你的文本框「txtrate」和「數值txttotalkm「,你可以使用」NumericUpDown「控件。它只允許數字輸入,所以不需要使用解析方法。