输入字符串格式不正确3

时间:2016-04-13 13:31:28

标签: c# asp.net

第50行:

total_cost += Convert.ToInt16(lbl_total_price.Text);
  

执行当前期间发生了未处理的异常   网络请求。请查看堆栈跟踪以获取更多信息   错误以及它在代码中的起源。例外细节:   System.FormatException:输入字符串的格式不正确。

如何纠正这个?

3 个答案:

答案 0 :(得分:1)

我怀疑价格(可以说,14.95)是整数值(问题中为Int16);可能您的意思是DoubleDecimal

  // 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);

最后,如果您正在处理价格并且实际上有非整数数据(如小数位),您可以考虑简单地将值解析为Decimaldouble

total_cost += Convert.ToDecimal(cleanedPrice);

total_cost += Convert.ToDouble(cleanedPrice);