将字符串转换为 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 的转换
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 不会删除这个问题来帮助别人!