Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как проверить является ли введеный текст числом? [D7, Win2k]


Страницы:   1 2

Draught ©   (2004-07-21 15:08:00) 

Проблемка такая, есть Edit, в который должна вводится числовая информация, число может быть как целым, так и дробным, нужно проверить является ли текст числом.

Конечно можно делать это все через case:

for i:1 to length(Edit) do
case Edit[i] of
'0':;
'1':;
'2':;
'3':;
'4':;
'5':;
'6':;
'7':;
'8':;
'9':;
',':;
else showmessage('Не число!')
end;


но меня интересует другое, возможно есть какая-нить функция, позволяющая сразу это проверить?

TryStrToIntнапример, только эта для целых...


Рамиль   (2004-07-21 16:08:00) [1]

.
> Хотя если есть желающие реализовать на это примере теорию
> автоматов, то я буду не против...

Нет уж, спасибо, я в свое время курсовую писал по разбору паскаля, больше не хочу:) Вообщем самый лучший вариант здесь, это TryStrToFloat


Draught   (2004-07-21 16:04:00) [2]

Ну вообщем-то уже вся ясна...
я думаю тему можно закрывать...

Хотя если есть желающие реализовать на это примере теорию автоматов, то я буду не против...
Так же желающие реализовать теорию не автоматов на этом же примере, тоже я буду не против...

на будущее все пригодится


Zlod3y   (2004-07-21 15:58:00) [3]

Без всяких автоматов!!!!!!!! Ненавижу эту теорию автоматов!!!!

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9':;
#8:;
',':if Length(Edit1.Text)=0 then Key:=#0;
else Key:=#0;
end;
end;

и ещё не забудь про OnExit удалять запятую если она последний символ в Edit1


Sandman25   (2004-07-21 15:51:00) [4]

Е все очень усложнит :(


Рамиль   (2004-07-21 15:49:00) [5]


> [21] Sandman25 ©   (21.07.04 15:45)

Упс:) Хотя в обсуждении выше знаки не упоминались.
Еще можно добавить E


Sandman25   (2004-07-21 15:45:00) [6]

C -> A если символ -,+,0,...,9
A -> A если символ 0,...,9
A -> B если символ DecimalSeparator
B -> B если символ 0,...,9


Рамиль   (2004-07-21 15:41:00) [7]

Есть еще TryStrToFloat

А самый крутой вариант - написать автомат:)

A -> A если символ 0,...,9
A -> B если символ DecimalSeparator
B -> B если символ 0,...,9


Draught   (2004-07-21 15:38:00) [8]

ну значит буду использовать MaskEditи StrToFloatили TryStrToFloat


Draught   (2004-07-21 15:37:00) [9]

Zlod3y,

вот StrToFloat хороший вариант...


Ega23   (2004-07-21 15:36:00) [10]

if not (Edit[I] in ['0'..'9']) and not (Edit[I] = DecimalSeparator) then

Числа могут отрицательными быть.


REA   (2004-07-21 15:36:00) [11]

TryStrToFloat еще


Zlod3y   (2004-07-21 15:32:00) [12]

я поправился StrToFloat
а ещё попробуй использовать TMaskEdit, говорят что сильно помогает в этом :о)


Draught   (2004-07-21 15:30:00) [13]

2Zlod3y,
я же вначале вроде ясно написал, что там число не целое может быть... StrToIntтока с целыми числами работает...

собственно остановился я на вот этом варианте
if not (Edit[I] in ['0'..'9']) and not (Edit[I] = DecimalSeparator) then


Reindeer Moss Eater   (2004-07-21 15:29:00) [14]

if (Key = ',') or (Key = '.') and (Key <> DecimalSeparator) then Key := DecimalSeparator

Но не спасет от дублирования разделителей в одной строке


Zlod3y   (2004-07-21 15:28:00) [15]

Сорри

try
stroka:=StrToFloat(Edit1.Text);
except
ShowMessage('Не число');
end;


Zlod3y   (2004-07-21 15:28:00) [16]

а ещё попробуй так:
try
stroka:=StrToInt(Edit1.Text);
except
ShowMessage('Не число');
end;


Ega23   (2004-07-21 15:26:00) [17]

if not (Edit[I] in ['0'..'9',',']) then - этот вариант мне очень понравился...

Это если DecimaleSeparator=','. А если '.' - жди беды.
И, кстати, BackSpace так не нажмёшь.

procedure TFInforms.eInfCodKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8, DecimaleSeparator]) then Key:=#0;
end;


Sandman25   (2004-07-21 15:24:00) [18]

Только ведь разделителем может быть не только запятая...
Тогда придется писать
if not (Edit[I] in ['0'..'9']) and not (Edit[I] = DecimalSeparator) then


Draught   (2004-07-21 15:23:00) [19]

if not (Edit[I] in ['0'..'9',',']) then- этот вариант мне очень понравился...


Zlod3y   (2004-07-21 15:22:00) [20]

А я ваще блокирую ввод букв:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9':;
#8:;
else Key:=#0;
end;
end;

Можешь поэкспериментировать с запятой ещё... я не стал с ней отрывок приводить, т.к. не вспомнил, но это возможно, я делал


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо