Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.075 c
4-1150704205
_Вован
2006-06-19 12:03
2006.11.05
Не могу скопировать/удалить файл на диске Novell 4.2


15-1160621748
Slider007
2006-10-12 06:55
2006.11.05
С днем рождения ! 12 октября


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


15-1160414992
Kolan
2006-10-09 21:29
2006.11.05
А что это mail.ru падать вздумал?


1-1159276063
Lexer
2006-09-26 17:07
2006.11.05
Вызов MDI окна не меняя WindowState у родителя