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


Автор: Samotnik 7.5.2008, 19:41
сабж 
почему то вот этот кусок кода отрабатывает, не так как нужно.  Т.е.  я ставлю тип  double  ввожу число к примеру 1.2 а мне в ответ эспепшен, а вот когда ввожу 1,2  (т.е. через запятую) то все нормально работает  smile    Это фишка сишарпа?   тогда, как сделать так, что бы тип double  распозновался через точку, а не через запятую ???
Код

public void Edit()
        {
            Console.WriteLine("Enter avtomobile Name:");
            String accountName = Console.ReadLine();

            for (int i = 0; i < m_arrayList.Count; i++)
            {
                DataModel dataModel = (DataModel)m_arrayList[i];
                if (accountName.Equals(dataModel.m_accountName))
                {
                    Console.WriteLine("Enter avto Name:");
                    String newAccountName = Console.ReadLine();
                    Console.WriteLine("Enter price:");
                    String arrears = Console.ReadLine();
                    DataModel newDataModel = new DataModel();
                    newDataModel.m_accountName = newAccountName;
                    newDataModel.m_arrears = double.Parse(arrears);  //  конкретно  вот  тут ошибка  !!!!!!
                    m_arrayList.RemoveAt(i);
                    m_arrayList.Insert(i, newDataModel);
                    Console.WriteLine("Edit successful");
                }
            }
        }


Автор: v2v 7.5.2008, 19:51
настроить региональные настройки Windows ;)

Автор: fromrus 7.5.2008, 19:55
А вот в коде точку можно ставить  smile Видно дело с парсером по умолчанию,т.е. компилятор распознает 1,2 как два отдельных символа...))))Вывод:писать свой собственный парсер... smile 

Автор: Samotnik 7.5.2008, 19:56
Цитата(v2v @  7.5.2008,  19:51 Найти цитируемый пост)
настроить региональные настройки Windows ;) 

 smile  smile  smile 
В этих разделах всегда так отвечают ?  
т.е. на другой ответ можно не расчитывать ? 

Автор: Unsane 7.5.2008, 20:19
А тебе правильно говорят. В настройках региональных стандартов для русского языка четко определено, что разделитель целой и дробной части запятая.

Попробуй так..
Код

newDataModel.m_arrears = double.Parse(arrears.Replace('.', ','));

Автор: vponomarov 7.5.2008, 20:39
Samotnik, нифига тебе не правильно говорят smile 
делай вот так:
Код

            System.Globalization.CultureInfo cult=new System.Globalization.CultureInfo("ru-RU");
            cult.NumberFormat.NumberDecimalSeparator=".";
            double d = double.Parse("1.2", cult.NumberFormat);

Автор: Samotnik 7.5.2008, 20:44
подождите, дело в том, что я в сишарпе не шарю, а лабу здавать надо, и желание разобраться тоже есть, к примеру в  Java я вообще ниразу такого не видел, что дробное число черезе точку считывается как ошибочное, а  число черезе запятую, как  нормальное дробное..   smile 
Вы пожалста код с обьяснениями вылаживайте !  smile 

Автор: vponomarov 7.5.2008, 20:49
Samotnik, формат чисел в каждой стране (в терминах .нет - культуры) разный.
по-умолчанию, при конвертации чисел из строк .нет берет текущую культуру винды, которая скорее всего у тебя русская, а в русской культуре разделителем является запятая.
в коде, который написал я при конвертации явно указывается какую культуру юзать, а в этой культуре в свою очередь явно указано, что разделителем является точка.

Автор: Samotnik 7.5.2008, 21:42
vponomarov,  пасибо, а как это к моему примеру приделать ?

Автор: mr.DUDA 8.5.2008, 09:45
Samotnik, 

Код
public void Edit()
        {
            Console.WriteLine("Enter avtomobile Name:");
            String accountName = Console.ReadLine();

            for (int i = 0; i < m_arrayList.Count; i++)
            {
                DataModel dataModel = (DataModel)m_arrayList[i];
                if (accountName.Equals(dataModel.m_accountName))
                {
                    Console.WriteLine("Enter avto Name:");
                    String newAccountName = Console.ReadLine();
                    Console.WriteLine("Enter price:");
                    String arrears = Console.ReadLine();
                    DataModel newDataModel = new DataModel();
                    newDataModel.m_accountName = newAccountName;

                    newDataModel.m_arrears = double.Parse(arrears.Replace('.', ','));  //  конкретно  вот  тут ошибка  !!!!!!

                    m_arrayList.RemoveAt(i);
                    m_arrayList.Insert(i, newDataModel);
                    Console.WriteLine("Edit successful");
                }
            }
        }

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