输入字符串的格式不正确 #2
Posted
技术标签:
【中文标题】输入字符串的格式不正确 #2【英文标题】:Input string was not in a correct format #2 【发布时间】:2011-07-13 14:54:06 【问题描述】:double temp;
temp = (double)Convert.ToDouble("1234.5678");
嘿,女士们,我这辈子都想不通为什么上面的线路不起作用。上面的行给了我一个运行时错误,上面写着:
未处理的类型异常 System.FormatException 发生在 mscorlib.dll
附加信息:输入字符串 格式不正确。
【问题讨论】:
【参考方案1】:据我所知,Convert
方法使用当前语言环境进行此类转换。在这种情况下,我猜您当前的语言环境会期望逗号作为小数点。尝试为您的应用程序设置当前区域设置或转换为使用点的某些语言/国家(例如 en_US)。该方法应提供第二个可选参数以提供 IFormatProvider 作为替代解决方案。
【讨论】:
【参考方案2】:为了convert string to double无一例外:
System.FormatException 类型的未处理异常发生在 mscorlib.dll
附加信息:输入字符串的格式不正确。
通过提供第二个参数值CultureInfo.InvariantCulture 使其文化不敏感,例如:
double.Parse("1234.5678", CultureInfo.InvariantCulture)
【讨论】:
【参考方案3】:第一个解决方案(如其他帖子中所述):
double temp = double.Parse("1234.5678", CultureInfo.InvariantCulture);
第二种解决方案 - 使其默认为当前线程:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
double temp = double.Parse("1234.5678");
第三种解决方案 - 使其默认为代码块:
var prevCurrentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
...
double temp = double.Parse("1234.5678");
...
Thread.CurrentThread.CurrentCulture = prevCurrentCulture;
【讨论】:
【参考方案4】:您可能会以某种方式使用欧洲本地人。在一些国家,.和 , 在数字上是相反的。
【讨论】:
【参考方案5】:您好,正如马里奥所说,您必须在考虑区域设置的情况下对其进行解析。
double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);
问候。
【讨论】:
【参考方案6】:检查您的区域设置。你的十进制符号必须是“.”。
【讨论】:
【参考方案7】:double temp = double.Parse("1234,5678");
【讨论】:
【参考方案8】:我建议你改用TryParse
,这样你就不需要处理解析异常了。
double temp = 0;
if (double.TryParse("123.456", out temp)
Console.WriteLine(string.Format("Parsed temp: 0", temp);
else
Console.WriteLine("Input value was not able to be parsed.");
【讨论】:
【参考方案9】:我没有看到上面的代码有任何问题。它工作正常并打印值1234.5678
。我在VS2008中试过了。可能与您机器上的区域设置有关。
【讨论】:
【参考方案10】:当你让文本框为空时我发现了问题 出现此错误,请尝试此错误处理。
System.FormatException 类型的未处理异常发生在 mscorlib.dll 附加信息:输入字符串不正确 格式。
if (!string.IsNullOrEmpty(Txt1.Text)) int _qty = (int)Convert.ToInt32(Txt1.Text);
【讨论】:
以上是关于输入字符串的格式不正确 #2的主要内容,如果未能解决你的问题,请参考以下文章