Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];
ВнизИсключ. ситуац. Найти похожие ветки
← →
Kaldr (2002-05-31 11:46) [0]Помогите разобраться с исключ. ситуациями здесь может возникать деление на ноль или еще что-то вот такая штука не работает:
Case d of
.............
4: try
begin if StrToFloat(Label1.Caption)<>0 then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
expect EMathError
do ShowMessage("Div Zero");
end;
и что же тут не так??
← →
Cossys (2002-05-31 12:00) [1]1. do ShowMessage("Div Zero"); - do уберите
2. Честно говоря, никогда except на EMathError, EIOError не проверяю, просто пишите -
expect
ShowMessage("Div Zero");
end;
Ведь тут другая ошибка и не проглядывается
← →
Freezer (2002-05-31 12:58) [2]try
{ ... }
except
on E: EMathError do
ShowMessage("Division by zero!")
else
raise
end;
← →
Song (2002-05-31 13:01) [3]Do надо писать если написано on
А при делении на ноль возникает AV вида не EMathError...
← →
Anatoly Podgoretsky (2002-05-31 13:04) [4]Никогда ошибка деления на ноль не наступит
if StrToFloat(Label1.Caption )<>0 then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
← →
Игорь Шевченко (2002-05-31 13:07) [5]Song © (31.05.02 13:01)
EIntError = class(EExternal);
EDivByZero = class(EIntError);
EZeroDivide = class(EMathError);
:-))
← →
Freezer (2002-05-31 13:10) [6]Согласен с Song, конечно же ошибка другого класса, но смысл вопроса был не в этом... В приведенном коде Kaldr куча синтаксических ошибок! expect -> except, например...
try
{ ... }
except
on E: Exception do
Application.HandleException(E);
end;
← →
Anatoly Podgoretsky (2002-05-31 13:27) [7]А ты не думаешь, что ее не наступит по причине отсутствия самого деления, вообще то этот код одна сплошная ошибка
← →
Anatoly Podgoretsky (2002-05-31 13:40) [8]Kaldr © (31.05.02 11:46)
Вообще если хочешь, что бы это заработало и лучше для всех арифметических ошибок, то можно написать так
4:
try
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
execpt
ShowMessage("Math error");
end;
← →
Reindeer Moss Eater (2002-05-31 14:25) [9]Кроме перечисленных выше классов может быть еще и
EInvalidOp при делении на ноль
← →
Игорь Шевченко (2002-05-31 14:28) [10]Дабы прекратить дебаты о типах Exceptions
function ForceFixedZeroDivide (K, M : Integer) : INteger;
begin
K := (M DIV 2) - K;
Result := M DIV K;
end;
function ForceFloatZeroDivide (K, M : Extended) : Extended;
begin
K := (M / 2) - K;
Result := M / K;
end;
procedure TForm1.Button1Click(Sender: TObject);
var K : Integer;
M : Integer;
begin
K := 5;
M := K * 2;
ForceFixedZeroDivide (K, M);
end;
procedure TForm1.Button2Click(Sender: TObject);
var K : Extended;
M : Extended;
begin
K := 5;
M := K * 2;
ForceFloatZeroDivide (K, M);
end;
Попробуйте. D5/WinNt
← →
Reindeer Moss Eater (2002-05-31 14:43) [11]EInvalidOp в этом примере не получится.
← →
Игорь Шевченко (2002-05-31 14:54) [12]Reindeer Moss Eater (31.05.02 14:43)
А в каком получится ? :-)
← →
Reindeer Moss Eater (2002-05-31 15:12) [13]А получится если разделить целый ноль на целый ноль
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c