Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Welche Zahl ist größer 50, kleiner 60 und gerundet 0? (https://www.delphipraxis.net/73051-welche-zahl-ist-groesser-50-kleiner-60-und-gerundet-0-a.html)

Angel4585 11. Jul 2006 15:10


Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
Hallo,

ich hab folgenden Codeabschnitt in meinem Quelltext:

Delphi-Quellcode:
function TForm1.Test : string;
var xtest : real;
begin
with MyZQuery do
  try
    sql.Text:='SELECT * FROM Tabelle';
    Active:=True;
    if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then
      xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben
    Result:=FieldByName(cfID).AsString;
  finally          
    Active:=False;
    end;
end;
Also.. kann mir jemand sagen was da los ist? :wall:

Danke :)

:angel:

rwachtel 11. Jul 2006 15:26

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
Woher weisst Du, wass in xtest geschrieben wird? So wie ich das sehe, wird xtest nicht weiter verwendet.

himitsu 11. Jul 2006 15:29

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
die Variable wird vom Compiler wegoptimiert

Delphi-Quellcode:
function TForm1.Test : string;
var xtest : real;
begin
with MyZQuery do
  try
    sql.Text:='SELECT * FROM Tabelle';
    Active:=True;
    if (FieldByName(cfGesamtpreis).AsFloat>50.0)and(FieldByName(cfGesamtpreis).AsFloat <60.0) then
      xtest:=FieldByName(cfGesamtpreis).AsFloat;//in xtest wird hier dauernd 5,2598911262e-307 geschrieben
    Result:=FieldByName(cfID).AsString;
  finally          
    Active:=False;
    end;
if xtest = 0 then ; // damit sollte es gehn
end;

Jasocul 11. Jul 2006 15:39

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
Selbst wenn xtest nicht wegoptimiiert würde, kann die Variable immer noch einen unbestimmten Inhalt haben. Es könnte ja durchaus passieren, dass die If-Bedingung nicht erfüllt ist.

Angel4585 11. Jul 2006 15:54

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
ich hab da en Haltepunkt rein gemacht... auf die zuweisung..

Jasocul 11. Jul 2006 15:56

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
Du musst dann aber auch noch einen Schritt weiter gehen. Ansonsten ist die Zuweisung noch nicht erfolgt und die Variable ist noch nicht gefüllt. Hat also ihren nicht-initialisierten Zustand.
Oder setze mal den Haltepunkt nach der Zuweisung. (Bei der Result-Zuweisung)

Angel4585 11. Jul 2006 16:07

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
wenn ich ihn danach setze besteht die möglichkeit das er nich reingegangen ist. so schalu das ich en schritt weiter muss war ich auch.. ich schu morgen mal was passiert wenn ich die Variable danach nochmal verwende...

himitsu 11. Jul 2006 16:07

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
mach also mal den Haltepunkt auf Result:=FieldByName(cfID).AsString; und normaler Weise sollte Delphi was sagen, wegen der nichtgenutzten Variable ... also versuch es auch mal mit urgendwas, was diese Variable hinterher noch verwendet (z.B. mein IF).

Angel4585 12. Jul 2006 07:25

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
ok ich hab die Variable danach nochmal verwendet und jetzt funt es, scheint wirklich "nur" wegoptimiert geworden zu sein. Aber könnte man das nicht auch wenigstens dazuschreiben? Da steht zwar das der auf xtest zugewiesene Wert nie verwendet wird, aber adraus kann ich doch nicht darauf schliessen das der wegoptimiert wurde :roll:

Sidorion 12. Jul 2006 11:00

Re: Welche Zahl ist größer 50, kleiner 60 und gerundet 0?
 
Tja das ist genau der Grund, warum die Optimization grundsätzlich ausgeschaltet werden sollte. Der Compiler ist auch ohne Optimierung schnell genug und wenn sie an ist, macht er nur Blödsinn, wie z.B.: durchaus sinnvollen Code wegzuoptimieren oder Schindluder mit dem CallStack zu treiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz