![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка ошибок [D7, XP]
Leshas © (2006-04-12 09:27:00)Здравствуйте!
Скажите пожалуйста, как можно обрабатывать ошибки, например:
1) есть 2 Edit'а и Button1. В 1 и 2 Edit вводятся 2 числа, и нажимается Button1.
2) При нажатии кнопки Button1 выполняется операция перевода значения строки в дробное число.
3) Преобразованные числа перемножаются
и тут возникает след. ситуация:
если вводятся числа, нипример, " 12,12" и " 10,1" (т.е. с запятой) перемножается отлично, а если вводить " 12.12" и " 10.1" (т.е. с точкой), то возникает ошибка!
Как можно обрабатывать такие ситуации без появления критических ошибок?
Anatoly Podgoretsky (2006-04-15 12:00:00) [1]Галинка © (15.04.06 02:00) [6]
Не с запятой, а с десятичным разделителем, цифровая клавиатура это поддерживает, какой текущий язык будет, такой будет и разделитель.
Главное не диктовать пользователю, какой разделитель использовать в системе, не программиста это.
Германн (2006-04-15 02:20:00) [2]
> Галинка © (15.04.06 02:00) [6]
>
> Если хотите громко и показательно, то try-except-end. Причем
> не по нажатию Button1, а по выходу из самого Edit.Exit.
>
> Можно еще на форму поместить предупреждение, что десятичный
> знак - запятая.
Можно, но, имхо, не нужно.
Лучше использовать какой-либо вариант из Virgo_Style © (12.04.06 09:35) [2]
Галинка (2006-04-15 02:00:00) [3]Если хотите громко и показательно, то try-except-end. Причем не по нажатию Button1, а по выходу из самого Edit.Exit.
Можно еще на форму поместить предупреждение, что десятичный знак - запятая.
имхо. с запятой удобнее, т.к. чаще цифры вводят с NumPad'a.
kester (2006-04-12 16:40:00) [4]Можно сделать так:
edit1.Text:=StringReplace(edit1.Text,'.',',',[rfReplaceAll]);
это заменяет все точки на запятые в Edit`e.
Еще можно поизменять DecimalSeparator:
DecimalSeparator:=',';
или
DecimalSeparator:='.';
Leshas (2006-04-12 09:46:00) [5]Соглашусь, может она и не критическая, но программа у меня слетает! Не хотелось бы!
Virgo_Style, спасибо!
balepa (2006-04-12 09:45:00) [6]Вот тебе еще
procedure TForm1.Button1Click(Sender: TObject);
var
k: double;
i:integer;
s: string;
begin
i:= pos('.',Edit1.Text);
s:= Edit1.Text;
s[i]:= ',';
k:= strtofloat(s);
Showmessage(Floattostr(k));
end;
Можно и MaskEdit использовать.
Virgo_Style (2006-04-12 09:35:00) [7]* запретить ввод "неправильного" знака
* заменить "неправильный" на "правильный" (можно на лету)
* запретить нажатие кнопки при неверных исходных
* использовать функцию перевода строки в число, не различающую "." и ","
* использовать StrToFloatDef
* использовать TryStrToFloat
* использовать try-except-end
и вообще imho это не критическая ошибка.
Anatoly Podgoretsky (2006-04-12 09:33:00) [8]TryStrToFloat