第50行:
total_cost += Convert.ToInt16(lbl_total_price.Text);
执行当前期间发生了未处理的异常 网络请求。请查看堆栈跟踪以获取更多信息 错误以及它在代码中的起源。例外细节: System.FormatException:输入字符串的格式不正确。
如何纠正这个?
答案 0 :(得分:1)
我怀疑价格(可以说,14.95
)是整数值(问题中为Int16
);可能您的意思是Double
或Decimal
:
// Or .ToDecimal which is a better choice for money
total_cost += Convert.ToDouble(lbl_total_price.Text);
更好的方法是尝试解析:
Double value; // Or Decimal
if (Double.TryParse(lbl_total_price.Text, out value))
total_cost += value;
else {
// lbl_total_price.Text is not a floating point value, say, "bla-bla-bla"
//TODO: put required response for such format error
}
答案 1 :(得分:0)
使用int.TryParse
检查值是否为数值int total_cost;
bool isInt = int.TryParse(lbl_total_price.Text, out total_cost );
答案 2 :(得分:0)
这里可能会出现各种各样的错误,但基本要点是lbl_total_price
文本框中的值不是有效整数(因此转换失败)。
您可能需要考虑使用将返回布尔值的Int16.TryParse()
方法来指示解析是否成功:
int price;
if(Int16.TryParse(lbl_total_price.Text, out price))
{
// If your conversion was successful, then price will be stored here
}
else
{
// Uh oh. It wasn't in the proper format.
}
然而,如果不了解您的价值所处的格式,可能很难确切地说出错误。如果您有任何非数字值,您可以考虑在解析您的值之前通过Regex.Replace()
调用显式地删除它们:
// Remove all non-numeric data via a Regular Expression
var cleanedPrice = Regex.Replace(lbl_total_price.Text,@"[^\d]","");
total_cost += Convert.ToInt16(cleanedPrice);
最后,如果您正在处理价格并且实际上有非整数数据(如小数位),您可以考虑简单地将值解析为Decimal
或double
:
total_cost += Convert.ToDecimal(cleanedPrice);
或
total_cost += Convert.ToDouble(cleanedPrice);