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

Вниз

Обработка ошибок   Найти похожие ветки 

 
Leshas ©   (2006-04-12 09:27) [0]

Здравствуйте!

Скажите пожалуйста, как можно обрабатывать ошибки, например:
1) есть 2 Edit"а и Button1. В 1 и 2 Edit вводятся 2 числа, и нажимается Button1.
2) При нажатии кнопки Button1 выполняется операция перевода значения строки в дробное число.
3) Преобразованные числа перемножаются

и тут возникает след. ситуация:
если вводятся числа, нипример, "12,12" и "10,1" (т.е. с запятой) перемножается отлично, а если вводить "12.12" и "10.1" (т.е. с точкой), то возникает ошибка!

Как можно обрабатывать такие ситуации без появления критических ошибок?


 
Anatoly Podgoretsky ©   (2006-04-12 09:33) [1]

TryStrToFloat


 
Virgo_Style ©   (2006-04-12 09:35) [2]

* запретить ввод "неправильного" знака
* заменить "неправильный" на "правильный" (можно на лету)
* запретить нажатие кнопки при неверных исходных
* использовать функцию перевода строки в число, не различающую "." и ","
* использовать StrToFloatDef
* использовать TryStrToFloat
* использовать try-except-end

и вообще imho это не критическая ошибка.


 
balepa ©   (2006-04-12 09:45) [3]

Вот тебе еще
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 использовать.


 
Leshas ©   (2006-04-12 09:46) [4]

Соглашусь, может она и не критическая, но программа у меня слетает! Не хотелось бы!

Virgo_Style, спасибо!


 
kester ©   (2006-04-12 16:40) [5]

Можно сделать так:
edit1.Text:=StringReplace(edit1.Text,".",",",[rfReplaceAll]);
это заменяет все точки на запятые в Edit`e.
Еще можно поизменять DecimalSeparator:
DecimalSeparator:=",";
или
DecimalSeparator:=".";


 
Галинка ©   (2006-04-15 02:00) [6]

Если хотите громко и показательно, то  try-except-end. Причем не по нажатию Button1, а по выходу из самого Edit.Exit.

Можно еще на форму поместить предупреждение, что десятичный знак - запятая.

имхо. с запятой удобнее, т.к. чаще цифры вводят с NumPad"a.


 
Германн ©   (2006-04-15 02:20) [7]


> Галинка ©   (15.04.06 02:00) [6]
>
> Если хотите громко и показательно, то  try-except-end. Причем
> не по нажатию Button1, а по выходу из самого Edit.Exit.
>
> Можно еще на форму поместить предупреждение, что десятичный
> знак - запятая.

Можно, но, имхо, не нужно.
Лучше использовать какой-либо вариант из Virgo_Style ©   (12.04.06 09:35) [2]


 
Anatoly Podgoretsky ©   (2006-04-15 12:00) [8]

Галинка ©   (15.04.06 02:00) [6]
Не с запятой, а с десятичным разделителем, цифровая клавиатура это поддерживает, какой текущий язык будет, такой будет и разделитель.
Главное не диктовать пользователю, какой разделитель использовать в системе, не программиста это.



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

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
2-1144770126
ViktorZ
2006-04-11 19:42
2006.04.30
сложить два столбца...


2-1145091047
Golik
2006-04-15 12:50
2006.04.30
QuickRep


2-1144932310
Golik
2006-04-13 16:45
2006.04.30
DateTimePicker


10-1116426728
iSprite
2005-05-18 18:32
2006.04.30
Никак не могу получить IADsMembers. (LDAP/WinNT)


4-1139327559
abakh
2006-02-07 18:52
2006.04.30
OleContainer