![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как проверить является ли введеный текст числом? [D7, Win2k]
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;
Можешь поэкспериментировать с запятой ещё... я не стал с ней отрывок приводить, т.к. не вспомнил, но это возможно, я делал