输入字符串格式错误不正确

时间:2016-08-25 08:11:55

标签: c# visual-studio

以下是代码:

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

如果有更简单的方法,请告诉我。

3 个答案:

答案 0 :(得分: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,VAT和TOTAL,而不是将AGAIN从标签转换为整数?

或者更好的是,为什么你需要从标签中重新转换为整数?

答案 1 :(得分:0)

解析应该始终将错误的格式输入保持为异常引发原因。对于C#中的相同,有明确的解决方案,如。

•如果您有一个字符串,并且您希望它始终是一个整数(例如,如果某个Web服务以字符串格式递给您一个整数),则您使用{{1} }。

•如果您正在收集用户的输入,您通常会使用Int32.Parse(),因为它允许您在用户输入无效输入时对情况进行更精细的控制。

Int32.TryParse()将一个对象作为其参数,我相信当它发现作为参数的对象是一个字符串时会调用Convert.ToInt32()

答案 2 :(得分:0)

如果您只允许TextBox中的数字值" txtrate"和" txttotalkm",您可以使用" NumericUpDown"控制。它只允许数字输入,因此不需要使用解析方法。