Форум: "Начинающим";
Текущий архив: 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.065 c