Главная страница
    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.51 MB
Время: 0.04 c
15-1161096206
Sergey Masloff
2006-10-17 18:43
2006.11.05
незаметное событие


15-1160804375
Andy BitOff
2006-10-14 09:39
2006.11.05
Ваше мнение о книге?


2-1161069191
Батя
2006-10-17 11:13
2006.11.05
Типа listbox a только в место текста картинки


3-1157532896
SergP.
2006-09-06 12:54
2006.11.05
Как предотвратить "обрезание" полей?


15-1161180360
IMHO
2006-10-18 18:06
2006.11.05
Ну-ка, от винта!





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