【问题标题】:Input string was not in a correct format #2输入字符串的格式不正确 #2
【发布时间】:2011-07-13 14:54:06
【问题描述】:
double temp;
temp = (double)Convert.ToDouble("1234.5678");

嘿,女士们,我这辈子都想不通为什么上面的线路不起作用。上面的行给了我一个运行时错误,上面写着:

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

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

【问题讨论】:

    标签: c# .net parsing double


    【解决方案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);}
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2017-08-25
                        • 1970-01-01
                        • 1970-01-01
                        • 2022-01-23
                        • 2013-08-22
                        相关资源
                        最近更新 更多