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

Вниз

Проверка числового значения   Найти похожие ветки 

 
wewill   (2006-10-17 19:38) [0]

Есть такая тривиальная задача: необходимо проверить стринговую переменную, является ли её значение числом. На мой взгляд это всё решается как то приблизительно так:
function IsNumber(s: string): Boolean;
var
 i: Integer;
begin
 Result := False;
 for i := 1 to Length(s) do
   case s[i] of "0".."9":;
    else Exit;
   end;
 Result := True;
end;


Но залез в гугл, я обнаружил ещё интересный способ:
function IsNumber(mStr: string): Boolean;
var
 I: Real;
 E: Integer;
begin
 Val(mStr, I, E);
 Result := E = 0;
 E := Trunc(I);
end;


Что лучше?


 
Ketmar ©   (2006-10-17 19:51) [1]

и то фигня, и то фигня. %-)


 
Palladin ©   (2006-10-17 20:12) [2]

1 вариант: да, в машину лучше влезать через багажник
2 вариант: классика, но интересного ничего нет, достаточно прочитать книжечку небольшую, про основы паскаля, турбо паскаля...


 
RASkov   (2006-10-17 20:23) [3]

> [0] wewill   (17.10.06 19:38)

function IsNumber(s: string): Boolean;
var
i: Integer;
begin
Result := False;
try
 StrToInt(S);
 Result := True;
except Result := False; end;
end;


 
Ketmar ©   (2006-10-17 20:25) [4]

и почему все забыли о const?

> [3]
тело except -- лишнее. переменная -- лишняя. про TryStrToInt() тоже не помним. низачот, короче.


 
Palladin ©   (2006-10-17 20:26) [5]


> [3] RASkov

ай ай ай. не хорошо.

IsNumber("4294967298")=False


 
Ketmar ©   (2006-10-17 20:34) [6]

кстати, не озвучено, считать ли числами дроби. и если да -- то в какой форме. а строку из 4096 цифирок числом считать? или белибердой? мрак.


 
Leonid Troyanovsky ©   (2006-10-17 20:36) [7]


> Ketmar ©   (17.10.06 20:25) [4]

> тело except -- лишнее. переменная -- лишняя.


Да, вообще, приведенное - лишнее, бо, скажем,
Val работает как с Integer, так и Float.
И не возбуждает исключений всуе.

--
Regards, LVT.


 
wewill   (2006-10-17 20:36) [8]

Мне надо любое текстовое выражение, состоящее из чисел - считать числом. Т.е. 4096 циферок - тоже число.


 
Leonid Troyanovsky ©   (2006-10-17 20:40) [9]


> wewill   (17.10.06 20:36) [8]

>  считать числом. Т.е. 4096 циферок - тоже число.


+4.0E-96 -число?

--
Regards, LVT.


 
Palladin ©   (2006-10-17 20:44) [10]

хм... иногда, когда дверь мерзнет/клинит, приходится лазать и через багажник

только немного измененный

Function IsNumber(Const s:String):Boolean;
Var
i:Integer;
begin
Result:=False;
If (s<>"") and (Not (s[1] in ["0".."9","+","-"])) Then Exit;
For i:=2 to Length(s) do
 If Not (s[i] in ["0".."9"]) Then Exit;
Result:=True;
End;


 
Kolan ©   (2006-10-17 20:44) [11]

StringToFloat


 
Loginov Dmitry ©   (2006-10-17 20:44) [12]

ну тады

Result := False;

for I := 1 to Length(S) do
 if not S[I] in ["0".."9"] then
   Exit;

Result := True;


Ну с дробными и отрицательными числами будет несколько сложнее, т.е. нужно учитывать, что знак минус может стоять вначале числа, а не абы как, в действительном числе может быть не 2-х знаков "-", не более 1-го символа ".", может присутствовать символ "Е".


 
Palladin ©   (2006-10-17 20:45) [13]


> [9] Leonid Troyanovsky

скорее размер строкового представления... раз 4096 циферек


 
Kolan ©   (2006-10-17 20:50) [14]

Result := True;
try
 StringToFloat(S);
except
 Result := False;
end;  


Ну с дробными и отрицательными числами будет несколько сложнее, т.е. нужно учитывать, что знак минус может стоять вначале числа, а не абы как, в действительном числе может быть не 2-х знаков "-", не более 1-го символа ".", может присутствовать символ "Е".
Это все учтеться.

Может есть
TryStringToFloat?


 
Ketmar ©   (2006-10-17 20:52) [15]

>[14] Kolan(c) 17-Oct-2006, 20:50
>Может есть
>TryStringToFloat?
может, справка расскажет?


 
Kolan ©   (2006-10-17 20:56) [16]

Тем более TryStrToFloat. Что еще надо?


 
Ketmar ©   (2006-10-17 20:57) [17]

>[16] Kolan(c) 17-Oct-2006, 20:56
>Тем более TryStrToFloat. Что еще надо?
[8] пролетает.


 
Kolan ©   (2006-10-17 21:04) [18]


> Мне надо любое текстовое выражение, состоящее из чисел -
>  считать числом. Т.е. 4096 циферок - тоже число.

Афтару только кажется, что ему это надо, думаю [17] хватит...


 
@!!ex ©   (2006-10-17 21:53) [19]


> Loginov Dmitry ©   (17.10.06 20:44) [12]

А нас в вузе пинают, если мы используем Exit, Break, Continue и т.д.... :\


 
RASkov   (2006-10-17 22:13) [20]

> тело except -- лишнее. переменная -- лишняя. про TryStrToInt()
> тоже не помним. низачот, короче.

Ну если в начале Result:=False; убрать (забыл:)


> TryStrToInt


> IsNumber("4294967298")=False

Тогда TryStrToInt64:)


> [5] Palladin ©   (17.10.06 20:26)
> [6] Ketmar ©   (17.10.06 20:34)

Придирка... у автора в коде не было проверок на точку:)


> Мне надо любое текстовое выражение, состоящее из чисел -
> считать числом. Т.е. 4096 циферок - тоже число.

Это можно как понять т.е. если в строке сожержится число то его вернуть отбросив ненужные символы?


> А нас в вузе пинают, если мы используем Exit, Break, Continue
> и т.д.... :\

А зачем их тогда придумали? а я вот так делаю:

for n := 0 to 10 do begin
if n = 5 then Continue;
<какие то действия>
end;

Ну не надо мне обработку при n=5.


 
Рамиль ©   (2006-10-17 22:55) [21]

Если пошла такая пьянка,то через конечный атомат надо разбирать :o)


 
RASkov   (2006-10-17 23:15) [22]

> [21] Рамиль ©   (17.10.06 22:55)

Это какой еще автомат?, надо мирно цифиру вычислить:)


 
Loginov Dmitry ©   (2006-10-18 07:42) [23]

@!!ex ©   (17.10.06 21:53) [19]
А нас в вузе пинают, если мы используем Exit, Break, Continue


Забыл как-то спросить разрешения у вашего вуза, что использовать, как и использовать и где использовать.


 
Рамиль ©   (2006-10-18 09:13) [24]


> RASkov   (17.10.06 23:15) [22]

http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82
Это мирное "устройство" :)



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

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

Наверх




Память: 0.5 MB
Время: 0.051 c
2-1161087371
Svetlena
2006-10-17 16:16
2006.11.05
Dos


2-1161336424
Батя
2006-10-20 13:27
2006.11.05
Господа, как в Imagelist программно добоылять bmp-шки.


3-1157530066
DelphiLexx
2006-09-06 12:07
2006.11.05
OnSetText на Lookup поле - возникают проблемы


6-1149969194
Lex Luthor
2006-06-10 23:53
2006.11.05
Idpop3 показ сообщений в ListViewe


2-1161531049
n0name
2006-10-22 19:30
2006.11.05
Delphi + DLL + printf = magic?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский