输入字符串的格式不正确#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中尝试过它。 可能与您机器上的区域设置有关。