将字符串转换为 int 会导致格式异常

本文关键字:格式 异常 int 字符串 转换 | 更新日期: 2023-09-27 18:35:31

>我目前正在获取一个字符串的值,并希望将其放在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 中发生了类型为'System.FormatException'的异常.dll但未在用户代码中处理 其他信息:输入字符串格式不正确。

错误指向 p2 到 INT 的转换

将字符串转换为 int 会导致格式异常

33.7是一个

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

double value = double.Parse( p2 );

或者,如果您确实希望将其作为整数:

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

不过,你会失去小数。

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

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

我做的第一件事是这些:

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

然后我可以跳过在我的 UDF 中接受空值。哪个绝对是好的吧?然后我遇到了关于该值的文化信息的问题,因为它的十进制位置。

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

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

从那以后,我在数据网格视图中运行了更流畅的值流。非常感谢你们所有人的力量!!xD

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