Entwickler-Ecke

Internet / Netzwerk - Floating point division by zero


crazywulf - Sa 29.04.06 15:10
Titel: Floating point division by zero
moin,
ich habe probleme mit diesem error
'Floating point division by zero'
ich benutze die komponente IdFTP um auf einen server zu connecten und manchmal schon beim connecten kommt dieser error..

Was bedeutet er?
warum kommt er?
und wie kann ich das verhindern?

Gruß crAZywuLf :D


Marc. - Sa 29.04.06 15:14

du versuchst anscheinend irgendeinen wert durch null zu teilen ;)
abfangen könntest du den fehler entweder mit einer exception:

Delphi-Quelltext
1:
2:
3:
4:
5:
        try
         a := b / 0;
        except 
         on EZeroDivide do
          ...

oder du kontrollierst vorher, mit einer if-anweißung, ob der wert gleich null ist ;)


crazywulf - Sa 29.04.06 15:27

moin,
Ich finde den Fehler nicht.
ich teile nur an einer stelle und da habe ich das schon eingebaut aber der fehler kommt immernoch. hier mal der qc von OnWork und von dem connect button


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
// OnWork
procedure TForm1.workwork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
var
  S: String;
  TotalTime,STime: TDateTime;
  H, M, Sec, MS: Word;
  DLTime: Double;
  a,b : integer;
begin
  try
    statusbar2.Panels[0].Text := 'DL Speed: '+Format('%.2f KB/s', [(AWorkCount - FBytes) / (GetTickCount - FTime)]);
  except
    on EZeroDivide do
      list1.Items.Add('¬error by zero');
  end;
  FTime := GetTickCount;
  FBytes := AWorkCount;
  //Aktualisieren der Fortschrittsanzeige:
  ProgressBar1.Position := AWorkCount;
  ProgressBar1.Update;
  StatusBar1.Panels[0].Text := 'Size: '+inttostr(AWorkCount)+' / '+inttostr(Progressbar1.Max)+' Bytes';
  Application.ProcessMessages;
end;

// Connect Button
procedure TForm1.Connect1Click(Sender: TObject);
var sl: TStringList;
  zeilennr: integer;
begin
  ftp.Connect();

  if ftp.Connected = True then
  begin
    list1.Items.Add('¬connected to server');
  end;
  ftp.Get('dl.dat''cs_dl.dat', true);
  button3.Enabled := true;
  button5.Enabled := true;

  sl:=TStringList.Create;

  try
    sl.LoadFromFile('cs_dl.dat');
    for zeilennr:=0 to sl.Count-1 do begin
      combo1.Items.Add(sl[zeilennr]);
    end;
  finally
    sl.free;
end;
end;


Gruß crAzywuLf :D


Marc. - Sa 29.04.06 16:04

(GetTickCount - FTime) scheint gleich null zu geben ;) überprüf das mal


crazywulf - Sa 29.04.06 16:15

user profile iconNoTVerYEvilPzYchO hat folgendes geschrieben:
(GetTickCount - FTime) scheint gleich null zu geben ;) überprüf das mal


Ich hab es überorüft und du hast recht es ergibt sehr oft null...
was jetzt?


EDIT : /////
ich hab es mit einer if frage geregelt danke ;)
du hast mir sehr geholfen EINFACH KLASSE :D

Gruß crAzywuLf :D