【问题标题】:Converting String to Int causes FormatException将 String 转换为 Int 会导致 FormatException
【发布时间】:2014-12-29 16:28:11
【问题描述】:

我目前正在获取一个字符串的值,并希望将其放在一个 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 而不是小数,这样会失去精度
  • 哦,开枪!哈哈哈,我只是注意到它知道...我尝试使用 double
  • 双值 = double.Parse(p1); todayRow.Cells[index + 1].Value = value.ToString();我试过这两个,但问题还是一样。

标签: c# string int


【解决方案1】:

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

double value = double.Parse( p2 );

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

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

你会丢失小数点。

【讨论】:

  • 在没有(int)-cast 的情况下执行此操作
  • 好吧,我的意思当然是double value = double.Parse( p2 ); :-)
  • 嘿嘿,这更有意义!
  • 我不能丢失十进制值,所以我尝试使用双精度......但它仍然说同样的事情......
  • 可能是小数点分隔符. 导致了这个问题。取决于你的文化。
【解决方案2】:

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

【讨论】:

  • 所以我尝试了这段代码,我在其他形式中使用它来摆脱文化问题: value = double.Parse(p1, System.Globalization.CultureInfo.InvariantCulture);但似乎问题仍然存在......同一行上的相同错误消息
  • 我做了,在重复所有步骤后我看到了问题
  • @Solem 如果答案对您有帮助,您可以将其标记为正确。
【解决方案3】:

原来如此。我再次尝试了你们所有人建议的所有步骤,那是我唯一一次注意到我的 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

从那时起,我的 datagridview 中运行的值流更加顺畅。 非常感谢你们所有人的力量!! xD

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

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多