将String转换为Int会导致FormatException

时间:2014-12-29 16:28:12

标签: c# string int

我目前正在获取字符串的值,并希望将其置于INT中以开始计算。

字符串值,例如是p2 = 33.7;这实际上是以摄氏度为单位的温度读数

这是我用来将p2转换为INT:

value = Convert.ToInt32(p2);
tavg = val / cnter;
cnter++;

此代码用于将转换后的值放置到datagridview行单元格中:

 todayRow.Cells[index++].Value = tavg.ToString();
 this.weatherreport_dgv.Rows.Add(todayRow);   

VS2013给出的错误信息是:

“mscorlib.dll中发生了'System.FormatException'类型的异常,但未在用户代码中处理。附加信息:输入字符串的格式不正确。”

错误指向p2转换为INT

3 个答案:

答案 0 :(得分:2)

33.7是十进制值,Int32只有整数。使用Convert.ToDouble/double.Parse获取浮点值:

double value = double.Parse( p2 );

或者如果你真的想要它作为一个整数:

int value = (int)double.Parse( p2 );

但你会丢失小数。

答案 1 :(得分:1)

使用int.TryParse方法!

int p = 0;

int.TryParse(p2, out p);

同样在您的代码中,值为十进制表示您需要调用:

decimal p = 0;

decimal.TryParse(p2, out p)

如果字符串的格式不是数字,则p将返回0。问题来自你提供的格式错误。

修改

您可以设置解析小数的文化。例如,如果您要从法国文化中解析小数,因为它们具有“,”十进制,您将需要:

decimal.TryParse(qz, NumberStyles.AllowDecimalPoint, CultureInfo.CreateSpecificCulture("fr-FR"), out a);

答案 2 :(得分:0)

所以在这里。我再次尝试了所有人建议的所有步骤,这是我唯一一次注意到我的UDF中的第一个抛出的值是什么都没有。大声笑XD傻吧?真的很抱歉。

我做的第一件事是:

if (p1.Length > 0) //To check the data fetch if its null or has a value at all.

然后我可以跳过接受UDF中的空值。哪个绝对好? 然后由于其小数位,我得到了有关CulturalInfo值的问题。

所以我按照建议使用了这段代码:

value = double.Parse(p2, CultureInfo.InvariantCulture);//To convert value with decimal to Double

从那时起,我在datagridview中运行的值更平滑。 非常感谢你们所有人!的xD

(Hope Stackoverflow不会删除此问题以帮助其他人!)