C# 将字符串转换为Int会导致FormatException

C# 将字符串转换为Int会导致FormatException,c#,string,int,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(to

我现在得到一个字符串的值,想把它放在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的转换

使用
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);

使用
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);

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

double value = double.Parse( p2 );
或者,如果您确实希望它是一个整数:

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

但是您将丢失小数。

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

double value = double.Parse( p2 );
或者,如果您确实希望它是一个整数:

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

不过,您将丢失小数。

就是这样。我再次尝试了你们建议的所有步骤,这是我唯一一次注意到第一次向我的UDF中抛出的值是零。LOL XD愚蠢,对吗?真的很抱歉

我做的第一件事是:

if (p1.Length > 0) //To check the data fetch if its null or has a value at all.
这样我就可以跳过接受自定义项中的空值。这绝对是好的,对吗? 然后我得到了这个关于值的文化信息的问题,因为它的小数点位置

因此,我建议使用以下代码:

value = double.Parse(p2, CultureInfo.InvariantCulture);//To convert value with decimal to Double
从那时起,我在datagridview中获得了更平滑的值流。 非常感谢你们所有人,谢谢你们的力量!!xD


(希望Stackoverflow不会删除这个问题来帮助其他人!)

所以它就在这里。我再次尝试了你们建议的所有步骤,这是我唯一一次注意到第一次向我的UDF中抛出的值是零。LOL XD愚蠢,对吗?真的很抱歉

我做的第一件事是:

if (p1.Length > 0) //To check the data fetch if its null or has a value at all.
这样我就可以跳过接受自定义项中的空值。这绝对是好的,对吗? 然后我得到了这个关于值的文化信息的问题,因为它的小数点位置

因此,我建议使用以下代码:

value = double.Parse(p2, CultureInfo.InvariantCulture);//To convert value with decimal to Double
从那时起,我在datagridview中获得了更平滑的值流。 非常感谢你们所有人,谢谢你们的力量!!xD



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

为什么要将其转换为int而不是小数,这样会导致精度下降哦!哈哈哈我只是注意到它知道。。。我将尝试使用doublevalue=double.Parse(p1);todayRow.Cells[index+1].Value=Value.ToString();我试过这两个,但问题仍然是一样的。为什么你要把它转换成整数而不是小数,你这样会失去精度哦!哈哈哈我只是注意到它知道。。。我将尝试使用doublevalue=double.Parse(p1);todayRow.Cells[index+1].Value=Value.ToString();我尝试了这两种方法,但问题仍然是一样的。在不使用
(int)
-castwell的情况下执行此操作,当然我的意思是
double value=double.Parse(p2):-)呵呵,是的,这更有意义!我不能丢失十进制值,所以我尝试使用double。。。。但它还是说了同样的事情……可能是小数点分隔符,也就是点
,导致了这个问题。取决于您的文化。在不使用
(int)
-castwell的情况下执行此操作,当然我的意思是
double value=double.Parse(p2):-)呵呵,是的,这更有意义!我不能丢失十进制值,所以我尝试使用double。。。。但它还是说了同样的事情……可能是小数点分隔符,也就是点
,导致了这个问题。取决于您的区域性。因此,我尝试了以下代码,我在另一种形式中使用这些代码来解决区域性问题:value=double.Parse(p1,System.Globalization.CultureInfo.InvariantCulture);但问题似乎仍然存在。。。在同一行上显示了相同的错误消息,在重新设置所有steps@Solem如果答案对您有帮助,您可以将其标记为正确。因此,我尝试了以下代码,并以另一种形式使用这些代码来解决区域性问题:value=double.Parse(p1,System.Globalization.CultureInfo.InvariantCulture);但问题似乎仍然存在。。。在同一行上显示了相同的错误消息,在重新设置所有steps@Solem如果答案对你有帮助,你可以把它标记为正确。