Поиск:

Ответ в темуСоздание новой темы Создание опроса
> в поле Edit значение типа float, как это проверить 
:(
    Опции темы
Mageno
Дата 14.7.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



У меня есть поле Edit. Мне надо сделать проверку является ли значение в поле float или нет... Подскажите пожалуйста как это сделать... 
PM MAIL   Вверх
Link90
Дата 14.7.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Битый" пиксель
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 25.11.2005
Где: Иркутск - середин а земли!

Репутация: 3
Всего: 7



Что такое float? Это десятичная дробь! Значит нужно искать в этом Edit запятую! ИМХО! 
PM MAIL ICQ   Вверх
bas
Дата 14.7.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



try {StrToFloat(Edit.Text);}
    catch (EConvertError&)
          {  Application->MessageBox(Edit.Text.c_str(),"Только число ",MB_OK);
           }

Добавлено @ 11:15 
Цитата(Link90 @  14.7.2006,  11:07 Найти цитируемый пост)
Значит нужно искать в этом Edit запятую!

А если там точка? 
PM MAIL   Вверх
Mageno
Дата 14.7.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(bas @ 14.7.2006,  11:14)
try {StrToFloat(Edit.Text);}
    catch (EConvertError&)
          {  Application->MessageBox(Edit.Text.c_str(),"Только число ",MB_OK);
           }


Не знаю может у меня что то с Builder но у меня на этом программа виснет. Сообщение не выдается. 
Причем при пошаговой отладке все нормально выдается сначала ошибка потом сообщение.  А если просто запустить виснет. 

Это сообщение отредактировал(а) Mageno - 14.7.2006, 11:37
PM MAIL   Вверх
bas
Дата 14.7.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



Попробуй через ф-ю
Код

inline bool __fastcall ProvInt(AnsiString d1)
{
double DN;
 try {DN=StrToFloat(d1);}
    catch (EConvertError&)
          {//3
           String SS=" "+d1;
           Application->MessageBox(SS.c_str(),"Только число ",MB_OK);
           return false;
          } //-3
return true;
}

  

Это сообщение отредактировал(а) bas - 14.7.2006, 11:48
PM MAIL   Вверх
Mageno
Дата 14.7.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Тоже самое... Можно как нибудь сделать что бы выводилось только сообщение MessageBox,  сама ошибка не выводилась? 
PM MAIL   Вверх
Yanis
Дата 14.7.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: нет
Всего: 111



Mageno
Запусти пример отдельно, а не по нажатию на F9 (или как там в билдере). 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
codelord
Дата 14.7.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



мне кажется не стоит париться и сделать чтобы юзверь по возможности не вводил неправильных символов
например так в событии Edit OnKeyPress
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if (Key!='1' && Key!='2' && Key!='3'&& Key!='4' && Key!='5'&& Key!='6' && Key!='7'&& Key!='8' && Key!='9'&& Key!='0'&& Key!='\r'&& Key!='\b'&&Key!='.'&& Key!=',')
 {
 Key=0x0;
 }
 if(Key=='.')Key=',';
}

ну или к теме 
у меня такая комбинация срабатывает нормально (выводится только сообщение без ошибки.).
Код

try
        {
        Edit2->Text=Edit1->Text.ToDouble();
        }
        catch(...) {ShowMessage("Не число :( ");}
  
да конечно вместо Edti2->Text можно подставить че нить типа doble n 

Это сообщение отредактировал(а) codelord - 14.7.2006, 13:16


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Yanis
Дата 14.7.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: нет
Всего: 111



Советую не выдумывать велосипед, а использовать TryStrToFloat. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
586
Дата 14.7.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Код
// с запятой -- 3,14
__inline BOOL IsFloat(float f)
{
 return !!(f-abs(f));
 // return (f-abs(f)!=0);
}

BOOL StrIsFloat(String str)
{
 double d;
 if(!TryStrToFloat(str, d)) return 0;
 return (d-abs(d)!=0);
}

// Это ф-ция для чисел с ТОЧКОЙ, т.е. напр. 3.14
// Определяет, является ли это числом, а не строкой
__inline BOOL StrIsFloat(char* str)
{
 double d=atof(str);
 return (d-abs(d)!=0);
}
     

Это сообщение отредактировал(а) 586 - 14.7.2006, 14:17
PM   Вверх
codelord
Дата 14.7.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Yanis, а  где там собственно велосипед?, 
довольно распространенные вещи.. smile  


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.