Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

как проверить является ли введеный текст числом?   Найти похожие ветки 

 
Draught ©   (2004-07-21 15:08) [0]

Проблемка такая, есть 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 например, только эта для целых...


 
Sandman25 ©   (2004-07-21 15:09) [1]

Val


 
Ega23 ©   (2004-07-21 15:09) [2]

Val


 
Draught ©   (2004-07-21 15:13) [3]

Val переводит любую строку в число, и возвращает код ошибки, и если код ошибки не нулевой, то значит неправильно перевелось.
Я все понял...
Усе, спасиб...


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

Кстати, в case можно написать:

case Edit[i] of
"0".."9",",":;
else showmessage("Не число!")
end;

или вообще

if not (Edit[I] in ["0".."9",","]) then


 
Reindeer Moss Eater ©   (2004-07-21 15:16) [5]

Введенный текст := "Сто тысяч миллионов";

Val тоже не спасет.
Длинная строка девяток - это несомненно число.
Но что делать если строка девяток ну очень длинная?


 
Sandman25 ©   (2004-07-21 15:18) [6]

[5] Reindeer Moss Eater ©   (21.07.04 15:16)

Ага. А если еще римские цифры учитывать, да анализировать их правильность (например, нет числа IVI), а потом еще и "пи" с "e" добавить :)


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

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

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

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


 
Draught ©   (2004-07-21 15:23) [8]

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


 
Sandman25 ©   (2004-07-21 15:24) [9]

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


 
Ega23 ©   (2004-07-21 15:26) [10]

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;


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

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


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

Сорри

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


 
Reindeer Moss Eater ©   (2004-07-21 15:29) [13]

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

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


 
Draught ©   (2004-07-21 15:30) [14]

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

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


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

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


 
REA ©   (2004-07-21 15:36) [16]

TryStrToFloat еще


 
Ega23 ©   (2004-07-21 15:36) [17]

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

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


 
Draught ©   (2004-07-21 15:37) [18]

Zlod3y,

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


 
Draught ©   (2004-07-21 15:38) [19]

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


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

Есть еще TryStrToFloat

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

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


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

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


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


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

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


 
Sandman25 ©   (2004-07-21 15:51) [23]

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


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

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

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


 
Draught ©   (2004-07-21 16:04) [25]

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

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

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


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

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.038 c
3-1089183547
1008
2004-07-07 10:59
2004.08.01
Как принудительно обновить DBRichEdit?


4-1087995049
Samael6
2004-06-23 16:50
2004.08.01
Хук на закрытие и свертывание окна


1-1090154157
Cyxapeff
2004-07-18 16:35
2004.08.01
StringGrid удаление строки.


14-1089555653
Гость
2004-07-11 18:20
2004.08.01
Стиль Xp


14-1089718358
syte_ser78
2004-07-13 15:32
2004.08.01
исходники DBTreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский