![]() |
FloattoStr führt zu Ungültige Gleitkommaoperation
Hallo, ich habe hie ein Programm, was bei einem Kunden mit der Fehlermeldung "Ungültige Gleitkommaoperation" absürzt.
Ich konnte den Fehler jetzt in folgender Zeile festmachen:
Delphi-Quellcode:
Uist ist hier als Extended deklariert. Wann kann es zu so einer Fehlermeldung kommen ? Ich habe aber momentan keine Idee, was UIst für einen Wert hat.
AbzuspeicherndeZeile:=FloatToStrF(Uist, ffFixed, 18, 2);
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Zeig mal ein bisschen mehr Code, ich kann da nämlich keinen Fehler entdecken. Und guck mal nach, was Uist für einen Wert hat.
Mfg |
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Setz nen Breakpoint, drück Strg+F7 und gib Uist ein.
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Moin, Moin,
was ist denn das für eine seltsame "AbzuspeicherndeZeile" die mit einem Gleitkommawert indiziert wird? Haben Zeilen nicht immer einen ganzzahligen Index? // edit : und noch dazu als String??? |
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Vielleicht er ja den Extended als String abspeichern? ;)
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Ja, AbzuspeicherndeZeile ist ein String, den ich abspeichern möchte, der eben diese Extendedwert beinhaltet. Einen Breakpoint kann ich leider nicht setzen, da dieser Fehler beim Kunde auftritt. Leider auch nur selten.
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Ich will ja ungern diese Raterunde hier unterbrechen, aber zeig doch mal ein bisschen mehr Code, vielleicht könnten wir den fehler dann eventuell unter Umständen möglicherweise finden :wink:
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Da ist ja das Problem. Hier ist der komplette Codeausschnitt wo der Fehler auftritt
Delphi-Quellcode:
Die ganzen Programm.Steps.Item[i].IstValues.Item[j].Uist, Iist... sind alle als Extended deklariert. Mehr passiert hier nicht, und trotzdem hat mir Madexcept in der Zeile den Fehler FloatToStrF(... "Ungültige Gleitkommaoperation" angegeben. for j := Cnt to Programm.Steps.Item[i].IstValues.Count-1 do begin Zeile := FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Uist, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Iist, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Qist, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].TempRegel, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Temp1, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].Temp2, ffFixed, 18, 2) + #9 + FloatToStrF(Programm.Steps.Item[i].IstValues.Item[j].StepTime, ffFixed, 18, 2); Ini.WriteString(('Istwerte Schritt ' + IntToStr(i)), ('Wert ' + IntToStr(j)), Zeile); end; Kann es was mit ![]() |
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Einer der Werte hat wahrscheinlich einen zu großen Exponenten, wodurch es bei der Gleitkommaoperation zu einen Stack-Überlauf kommt. Das kann dadurch sein, dass einer der Messwerte gegen Null geht (aber nicht Null und auch nicht -∞ ist). Vorschlag: Schreib Dir eine eigene FloatToStrDef Funktion, die die Exceptions behandelt und den Rückgabewert auf den Standard setzt.
|
Re: FloattoStr führt zu Ungültige Gleitkommaoperation
Werde ich machen. Danke
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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