Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > входная строка имела неверный формат


Автор: Тиниминиминиму 20.9.2009, 17:36
у меня выдает "входная строка имела неверный формат" в этом моменте кода

Код

String[] uses = new String[10];
Double[,] mass = new Double[10000, 50];
//пробовал также вариант double - не помогло
for (int i2 = 0;i2<7 ; i2++)
                        {
                            Console.WriteLine(uses[i2]);
                            mass[i1, i2] = Convert.ToDouble(uses[i2]);
                            Console.WriteLine(mass[i1, i2]);
                            Console.WriteLine(Convert.GetTypeCode(mass[i1, i2]));
                            Console.WriteLine(Convert.GetTypeCode(uses[i2]));
                        }


ошибка выскакивает при третьем прохождении, вывод на консоль сделал, чтобы видеть, в чем проблема ... 
таким образом консоль выдала следующее:
Код

20010103
20010103
Double
String
110000
110000
Double
String
680.00000

очевидно, что проблема возникла при конвертации строки 680.00000 в эквивалентный вариант типа Double, но почему ? При этом никаких проблем конвертации с предыдущими числами не возникало, хотя Double создан как раз для работы с числами с плавающей точкой ... 

Автор: KelTron 20.9.2009, 19:50
Скорее всего проблемы с культурой. Попробуй использовать запятую вместо точки, когда задаёшь число в виде строки.

Автор: Тиниминиминиму 20.9.2009, 21:14
Цитата(KelTron @ 20.9.2009,  19:50)
Скорее всего проблемы с культурой. Попробуй использовать запятую вместо точки, когда задаёшь число в виде строки.

спасибо, действительно помогло) удивительно ... не думал, что проблема может быть в такой глупости ... тогда бы уж назвали число с плавающей запятой )

Автор: Heinzz 20.9.2009, 21:31
у американцев точка, у нас запятая => эта фигня. В русской раскладке пользователь нумпадом всегда забивает запятые smile 

Автор: Lunatic2009 21.9.2009, 12:28
Можно написать расширяющий метод, что-то типа этого:

Код

    class Program
    {
        static void Main(string[] args)
        {
            string s = "3.14";
            double d = s.ToDouble();

            Console.WriteLine(d);
            Console.ReadKey();
        }
    }

    public static class StringExtension
    {
        public static double ToDouble(this string s)
        {
            double result = 0;

            try
            {
                result = Double.Parse(s);
            }
            catch (Exception)
            {
                try
                {
                    s = s.Replace(".", ",");
                    result = Double.Parse(s);
                }
                catch (Exception)
                {
                    try
                    {
                        s = s.Replace(",", ".");
                        result = Double.Parse(s);
                    }
                    catch (Exception)
                    {
                    }
                }
            }

            return result;
        }
    }

Автор: Heinzz 21.9.2009, 18:38
Я обычно делаю так:
Код

   string str = "15.256";
   double d = double.Parse(str.Replace('.',','));

работает.
Хотя это все региональные настройки виндуса виноваты. Такой ход не пройдет на всех компьютерах -  вдруг у кого-то виндовс английский или региональные настройки изменены. По правильному надо делать локализацию, а вот для себя и так пойдет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)