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

时间:2011-03-11 16:11:08

标签: c# .net parsing double

double temp;
temp = (double)Convert.ToDouble("1234.5678");
嘿Lads和女士们,我不能为我的生活弄清楚为什么上面这行没有用。上面的行给出了一个运行时错误,上面写着:

  

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

     

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

10 个答案:

答案 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);}