double temp;
temp = (double)Convert.ToDouble("1234.5678");
嘿Lads和女士们,我不能为我的生活弄清楚为什么上面这行没有用。上面的行给出了一个运行时错误,上面写着:
未处理的类型异常 发生了System.FormatException mscorlib.dll中
附加信息:输入字符串 格式不正确。
答案 0 :(得分:23)
据我所知,Convert
方法使用当前区域设置进行此类转换。在这种情况下,我猜你当前的语言环境会将逗号作为小数点。尝试设置应用程序的当前区域设置或转换为使用点的某个语言/国家/地区(例如en_US)。该方法应提供第二个可选参数,以提供IFormatProvider作为替代解决方案。
答案 1 :(得分:21)
为了convert string to double没有例外:
发生了System.FormatException类型的未处理异常 mscorlib.dll中
其他信息:输入字符串的格式不正确。
通过提供第二个参数值CultureInfo.InvariantCulture使其对文化不敏感,例如:
double.Parse("1234.5678", CultureInfo.InvariantCulture)
答案 2 :(得分:10)
第一个解决方案(如其他帖子中所述):
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;
答案 3 :(得分:5)
你可能会以某种方式使用欧洲本地人。在一些国家。并且,数字是相反的。
答案 4 :(得分:4)
嗨,马里奥说你必须考虑到区域设置来解析它。
double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);
问候。
答案 5 :(得分:2)
检查您的区域设置。您的小数符号必须为“。”。
答案 6 :(得分:0)
double temp = double.Parse("1234,5678");
答案 7 :(得分:0)
我没有看到上面的代码有任何问题。它工作正常并打印值1234.5678
。我在VS2008中尝试过它。可能与您机器上的区域设置有关。
答案 8 :(得分:0)
我建议您改用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 :(得分:0)
当您让文本框为空时,我发现了问题 发生此错误,请尝试使用此错误进行处理。
类型为System.FormatException的未处理异常发生在 mscorlib.dll附加信息:输入字符串不正确 格式。
if (!string.IsNullOrEmpty(Txt1.Text)) {int _qty = (int)Convert.ToInt32(Txt1.Text);}