输入字符串格式不正确

本文关键字:不正确 格式 字符串 输入 | 更新日期: 2023-09-27 17:56:57

有两个文本框,分别是unitprice.txtquantity.txt。 还有一个名为total.txt的文本框,随着用户输入单价和数量的时间不断更新。

O一旦用户输入这两个文本框,这两个文本框就会变空和总计.txt并按总数更新。 它需要连续完成,但在我的代码中不是 并说

INPUT STRING WASN'T IN A CORRECT FORM.

int tot = 0;
int sum = 0;   
tot = int.Parse(unitprice.Text) * int.Parse(quantitytxt.Text);
sum = int.Parse(total.Text) + tot;
total.Text = sum.ToString();

用户输入"单价和数量"后,TOAL将更新"总计"文本框。 用户再次输入第二项的单价和数量,然后需要更新"总计"文本框中的先前值,这意味着需要将从第二个项目生成的新总计添加到以前的总计中。(2500+3000=5500)

嘿,它解决了,但以这种方式。

int sum = 0;
private void button2_Click(object sender, EventArgs e)
{
try
{
    sum += int.Parse(qtytxt.Text) * int.Parse(unitprice.Text);
    total.Text = sum.ToString();    
}
catch (Exception er)
{
    MessageBox.Show(er.Message);
}

输入字符串格式不正确

首先检查文本框值是否为空,如果为空则在转换为解析 Int 时将 0 设置为默认值,否则将显示异常。 请参阅下面的代码,它将对您有所帮助。

int tot = 0;
int sum = 0;
tot = int.Parse(string.IsNullOrEmpty(unitprice.Text.Trim()) ? "0" : unitprice.Text.Trim()) * int.Parse(string.IsNullOrEmpty(quantitytxt.Text.Trim()) ? "0" : quantitytxt.Text.Trim());
sum = int.Parse(string.IsNullOrEmpty(total.Text.Trim()) ? "0" : total.Text.Trim()) + tot;
total.Text = sum.ToString();   

您正在尝试将文本框值的字符串值解析为整数,因此您不应该像上面那样做,因为它也可能包含空字符串或空值。因此,请遵循以下转换方法,以免发生错误。

tot = Convert.ToInt32(Convert.ToString(unitprice.Text)) * Convert.ToInt32(Convert.ToString(quantitytxt.Text));

为什么要遵循上述方法是,Convert.ToString()将处理空值并将空值转换为空字符串,Convert.ToInt32()会将空字符串转换为 0 值。

如果你想要另一个选项,你可以尝试Int32.TryParse(a_string_here,an_out_int_here);

有关详细信息,请查看此处的文档:MSDN TryParse

它将获取一个字符串并尝试将其解析为有效的int...如果失败,则返回0。

int a ;
Int32.TryParse("5",out a);
System.Out.WriteLine("a="+a); // Will be: a=5
Int32.TryParse("e",out a);
System.Out.WriteLine("a="+a); // Will be: a=0

首先检查文本框值是否不为空,就好像您要将其解析为 Int 并且当它为空时,会出现这个或类似的异常。

int tot = 0;
int sum = 0;   
tot = int.Parse(unitprice.Text!=String.Empty?unitprice.Text:"0") * int.Parse(quantitytxt.Text!=String.Empty?quantitytxt.Text:"0");
sum = int.Parse(total.Text!=String.Empty?total.Text:"0") + tot;
total.Text = sum.ToString();

您也可以尝试:

int tot = 0;
int sum = 0;   
tot = Convert.ToInt32(unitprice.Text!=String.Empty?unitprice.Text:"0") * Convert.ToInt32(quantitytxt.Text!=String.Empty?quantitytxt.Text:"0");
sum = Convert.ToInt32(total.Text!=String.Empty?total.Text:"0") + tot;
total.Text = sum.ToString();

试试这个:

int tot = 0;
int sum = 0;   
tot = Convert.ToInt32(unitprice.Text.Replace(" ", "")) * Convert.ToInt32(quantitytxt.Text.Replace(" ", ""));
sum = Convert.ToInt32(total.Text.Replace(" ", "")) + tot;
total.Text = sum.ToString();

如果这引发异常,您的文本框可能包含不需要的字符(即逗号:"1,000.00"或字母)或空,使转换引发异常。

问题是...如果字符串不是数字......

除数字以外的任何字符串值都会显示错误,指出输入字符串格式不正确

!!.

有一个解决方案.....将您的代码插入尝试捕获块

try{ your code here}catch(FormatException){}

或者找到另一种机制来避免数字以外的字符串。

如果输入值不是整数,Int32.Parse()将引发异常。 使用 Int32.TryParse() 转换值而不引发异常。 如果转换失败,TryParse()将返回false并返回零:

int intValue = -1;
bool result;
result = Int32.TryParse("23", out intValue); // result = true, intValue = 23
result = Int32.TryParse("AB", out intValue); // result = false, intValue = 0 

编辑:对于您的具体情况,请尝试以下操作:

int tot = 0;
int sum = 0;   
int price = 0;                           // output parameter to receive value
int quantity = 0;                        // output parameter to receive value
int total = 0;                           // output parameter to receive value
TryParse(unitprice.Text, out price);     // price contains the unit price value
TryParse(quantitytxt.Text out quantity); // quantity contains the quantity value
TryParse(total.Text, out total);         // total contains the total value
tot = price * quantity;
sum = total + tot;
total.Text = sum.ToString();
int tot = 0;
int sum = 0; 
tot = int.Parse(unitprice.Text+"0") * int.Parse(quantitytxt.Text+"0");
sum = int.Parse(total.Text+"0") + tot;
total.Text = sum.ToString();

试试这段代码。