![]() |
Delphi-Version: 7
"invalid floating point operation" finde den Fehler nicht
Ich habe ein seltsames Problem, wie der Titel schon sagt beim Klicken auf den Button2 kommt immer die Fehlermeldung "Invalid floating point operation".
Meine Variablen:
Delphi-Quellcode:
var
Form1: TForm1; i,j: Integer; Bst,b: Extended; Das hier ist der Quellcode zu Button2:
Delphi-Quellcode:
Der Fehler scheint in dieser Zeile zu sein,
procedure TForm1.Button2Click(Sender: TObject);
begin memo2.text:=''; for i:=1 to length(memo1.text) do begin Bst:=strtofloat(memo1.text[i]+memo1.text[i+1]+memo1.text[i+2]); b:=Bst; for j:=2 to strtoint(edit3.text) do begin Bst:=Bst*b; end; Bst:=Bst - (Trunc(Bst / strtoint(edit2.text)) * strtoint(edit2.text)); memo2.text:=memo2.text + chr(strtoint(floattostr(Bst))); end; end;
Delphi-Quellcode:
denn ohne sie läuft das Programm ohne Fehlermeldung.
Bst:=Bst - (Trunc(Bst / strtoint(edit2.text)) * strtoint(edit2.text));
Jedoch das seltsame ist die Zeile
Delphi-Quellcode:
habe ich auch bei Button1 verwendet, jedoch kommt da keine Fehlermeldung :shock::shock:
Bst:=Bst - (Trunc(Bst / strtoint(edit2.text)) * strtoint(edit2.text));
Quellcode Button1:
Delphi-Quellcode:
Ich hoffe ihr könnt mir weiterhelfen. Deshalb schonmal danke im voraus :)
procedure TForm1.Button1Click(Sender: TObject);
begin memo2.text:=''; for i:=1 to length(memo1.text) do begin Bst:=ord(memo1.text[i]); b:=Bst; for j:=2 to strtoint(edit1.text) do begin Bst:=Bst*b; end; Bst:=Bst - (Trunc(Bst / strtoint(edit2.text)) * strtoint(edit2.text)); if Bst <100 then begin if Bst < 10 then begin memo2.text:=memo2.text + '00' + floattostr(Bst); end else begin memo2.text:=memo2.text + '0' + floattostr(Bst); end; end else begin memo2.text:=memo2.text + floattostr(Bst); end; end; end; Euer St0rmhunter 8-) |
AW: "invalid floating point operation" finde den Fehler nicht
Bist Du einmal durchgesteppt und hast Dir die aktuellen Variableninhalte einmal angesehen? Mal abgesehen davon, dass Du munter hinter dem Stringende weiterliest und Logik und Darstellung vermischst, solltest Du vielleicht ein paar Zwischenvariablen und eine minimale Fehlerbehandlung einbauen, das erleichtert die Fehlersuche enorm.
|
AW: "invalid floating point operation" finde den Fehler nicht
Wie ich les hinterm Stringende weiter??
|
AW: "invalid floating point operation" finde den Fehler nicht
Zitat:
Zitat:
Geh mal in deine Projektotionen und schalte die Indexprüfung an. :zwinker: Und .Text holt jedesmal, bei jedem Aufruf den Text neu aus dem Memo ... das vorher in eine Variable erspart Vieles. Zitat:
![]() |
AW: "invalid floating point operation" finde den Fehler nicht
Upps da hab ich wohl die -2 vergessen
Delphi-Quellcode:
.
for i:=1 to length(memo1.text)-2 do
Nee kenne copy nicht. :? So habe die -2 ergänzt und trotzdem kommt noch die Fehlermeldung "Invalid floating point operation" :? |
AW: "invalid floating point operation" finde den Fehler nicht
Dann zitiere ich mich mal selbst:
Zitat:
Zitat:
|
AW: "invalid floating point operation" finde den Fehler nicht
es gibt 3 Stellen wo der beschriebene Fehler auftreten kann
Bst:=Bst*b; // Überlauf gegf. Double statt Extended / strtoint(edit2.text) // Division durch 0 Trunc( // wenn die Zahl zu groß ist |
AW: "invalid floating point operation" finde den Fehler nicht
@DeddyH
Zitat:
Zitat:
Und zu der Idee mit der minimalen Fehlerbehandlung, sry aber ich weiß nicht was du damit meinst? @Bummi Zitat:
Double: 2.23 x 10^-308 bis 1.79 x 10^308 ( ![]() Extended: 3.37 x 10^-4932 to 1.18 x 10^4932 ( ![]() Zitat:
Zitat:
|
AW: "invalid floating point operation" finde den Fehler nicht
Welcher Code ist wohl lesbarer und besser zu debuggen?
Beispiel 1:
Delphi-Quellcode:
Beispiel 2:
//Keine Trennung von Logik und Darstellung
Edit3.Text := IntToStr(StrToInt(Edit1.Text) div StrToInt(Edit2.Text));
Delphi-Quellcode:
Und wenn der Debugger nicht will (Projektoptionen auf Release gestellt?), dann kann man sich zur Not immer noch mit Zwischenausgaben (ShowMessage z.B.) behelfen.
var
Dividend, Divisor, Ergebnis: integer; begin if not TryStrToInt(Edit1.Text, Dividend) then begin ShowMessage('Edit1 enthält keine gültige Zahl'); exit; end; if not TryStrToInt(Edit2.Text, Divisor) then begin ShowMessage('Edit2 enthält keine gültige Zahl'); exit; end; if Divisor = 0 then begin ShowMessage('Divisor darf nicht 0 sein'); exit; end; Ergebnis := Dividend div Divisor; Edit3.Text := IntToStr(Ergebnis); |
AW: "invalid floating point operation" finde den Fehler nicht
Zitat:
was klappt denn da nicht? gibt es eine Fehlermeldung? vllt hilft es unter den Projektoptionen / Compiler dem Debugger auf die Sprünge zu helfen? Zitat:
Delphi-Quellcode:
for j:=2 to strtoint(edit3.text) do
Delphi-Quellcode:
maxj:=strtoint(edit3.text);
if maxj<2 then showmessage('vertan'); for j:=2 to maxj do Zitat:
[/QUOTE] "normalerweise" ist nicht das gleiche wie NIE! Normalerweise scheint im Sommer die Sonne und es ist warm (die Frage ist nur wo, und warm ist ziemlich relativ ) Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz