Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите пожалуйста, не понятная причина Format Exception

71K
09 декабря 2012 года
Георгий Гегеля
6 / / 09.12.2012
в общем проблема в следующем. имеется набор текстбоксов, в которые заносится информация из БД, и частично вводится пользователем.

Вот примерно так:


Код:
private void comboBox2_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            var selectCd = (sender as ComboBox).SelectedValue;
            if (selectCd != null)
            {
                var selName = this.база_данных1DataSet.name.FindByКод((int)selectCd);
                textBox28.Text = selName.Cv.ToString();
                textBox33.Text = selName.Cp.ToString();
                xTb.Text = selName.x.ToString();
                qTb.Text = selName.q.ToString();
                yTb.Text = selName.y1.ToString();
                mTb.Text = selName.m.ToString();
            }
        }
при нажатии на баттн, необходимо чтобы эти значения считывались из текст боксов, записывались в переменные, и в дальнейшем с ними происходили какие-нибудь действия.
программа валится при попытке конвертировать в double.

вот пример кода:


Код:
double diam, t, v, vr, s, mkr, p, tR, nr, nachDiam, konDiam, kilkOb,
                cp, cv, q, x, y, T, dsver, m;
 
            kilkOb = Convert.ToDouble(_kilkOb.Text);        //данные НЕ из БД
            nachDiam = Convert.ToDouble(_nachDiam.Text);    //данные НЕ из БД
            konDiam = Convert.ToDouble(_konDiam.Text);      //данные НЕ из БД
            cp = Convert.ToDouble(Cp.Text);              //данные из БД (валится и дальше не идет)
            cv = Convert.ToDouble(Cv.Text);          //данные из БД
            q = Convert.ToDouble(qTb.Text);          //данные из БД
            x = Convert.ToDouble(xTb.Text);               //данные из БД
            y = Convert.ToDouble(yTb.Text);               //данные из БД
            //T = Convert.ToDouble(stoiTb.Text);          //данные из БД
            //dsver = Convert.ToDouble(dSver.Text);      
            m = Convert.ToDouble(mTb.Text);
 
            t = Convert.ToDouble(_glubOtv.Text);
            v = (pi * konDiam * kilkOb) / 1000;
...

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

есть еще мысль.
в бд все числа стоят как Х,Х то есть разделитель между целой и дробной частью запятая, не точке. может в этом проблема?
446
09 декабря 2012 года
Meander
487 / / 04.09.2011
В качестве эксперимента попробуй Convert.ToDouble(F(xTb.Text)); где F() - заменяет разделитель
392
09 декабря 2012 года
cronya
421 / / 03.01.2009
зачем гадаете, пройдитесь дебагером и посмотрите что в переменных лежит. У вас из базы в каком типе идет число.
для C#:

 
Код:
double numer = 2.4;
Но факт в том, чтобы из стринг перевести в дабл надо записать так:

 
Код:
double numer = Convert.ToDouble("2,3");
если будет в стринг точка, то вылетает ошибка.
Попробуйте так сделать для числа:

 
Код:
string line = "5.4";
line = line.Replace(".", ",");
double numer = Convert.ToDouble(line);
341
09 декабря 2012 года
Der Meister
874 / / 21.12.2007
 
Код:
var format1 = System.Globalization.NumberFormatInfo.InvariantInfo;
var value1 = double.Parse("1.23", format1);

var format2 = System.Globalization.NumberFormatInfo.CurrentInfo;
var value2 = double.Parse("1,23", format2);
297
09 декабря 2012 года
koodeer
1.2K / / 02.05.2009
Заменять разделитель - это быдлокодерство, костыль. Шоб вам досталось поддерживать код с такими костылями!
Учитесь у Der Meister'а.

В БД числа хранятся именно как числа (во всяком случае должны), и понятие десятичный разделитель появляется только при взаимодействии с гуем.

Хинт: рекомендую для ввода/вывода чисел использовать не TextBox, а NumericUpDown.
392
09 декабря 2012 года
cronya
421 / / 03.01.2009
kooder согласен, но как говориться: век живи век учись :)
71K
09 декабря 2012 года
Георгий Гегеля
6 / / 09.12.2012
спасибо за советы, я просто дураком оказался.. по глупости ошибся текстбоксом и пытался считать значения с лейбла, а не с текстбокса...(( просто до этого две ночи не спал.. вот и вышло так. но спасибо за советы. т.к. я новичок, возьму на вооружение.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог