输入字符串的格式不正确#2

double temp; temp = (double)Convert.ToDouble("1234.5678"); 

嘿Lads和女士们,我不能为我的生活弄清楚为什么上面的行不起作用。 上面的行给出了一个运行时错误,说明了;

mscorlib.dll中发生了System.FormatException类型的未处理exception

附加信息:输入字符串格式不正确。

据我所知, Convert方法使用当前的语言环境来进行此类转换。 在这种情况下,我猜你当前的语言环境会将逗号作为小数点。 尝试为您的应用程序设置当前区域设置或转换为使用点的某个语言/国家/地区(例如en_US)。 该方法应提供第二个可选参数,以提供IFormatProvider作为替代解决方案。

为了将字符串转换为double而没有例外:

mscorlib.dll中发生了System.FormatException类型的未处理exception

附加信息:输入字符串格式不正确。

通过提供第二个参数值CultureInfo.InvariantCulture使其对文化不敏感,例如:

 double.Parse("1234.5678", CultureInfo.InvariantCulture) 

第一个解决方案(如其他post中所述):

 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; 

你可能会以某种方式使用欧洲本地人。 在一些国家。 并且,数字是相反的。

嗨,马里奥说你必须考虑到区域设置来解析它。

 double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture); 

问候。

检查您的区域设置。 您的小数符号必须为“。”。

 double temp = double.Parse("1234,5678"); 

我建议您使用TryParse ,因此您不需要处理解析exception。

 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."); } 

我没有看到上面的代码有任何问题。它工作正常并打印值1234.5678 。 我在VS2008中尝试过它。 可能与您机器上的区域设置有关。