Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Aus Extended wird immer Integer (oder Delphi rundet selbstständig) (https://www.delphipraxis.net/186918-aus-extended-wird-immer-integer-oder-delphi-rundet-selbststaendig.html)

Captnemo 12. Okt 2015 14:04

Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Hi,

ich habe hier ein "merkwürdiges" Problem.
In folgernder Routine sollen die Min- und die Max-Werte einer Liste bestimmt werden:
Delphi-Quellcode:
    self.FMax:=self[0].FYR;
    self.FMin:=self[0].FYR;
    for I := 0 to self.Count-1 do
    begin
      if self[i].FYR > self.FMax then
        self.FMax:=self[i].FYR;
      if self[i].FYR < self.FMin then
        Self.FMin:=self[i].FYR;
    end;
Die Deklaration der Variablen sieht so aus:
Delphi-Quellcode:
    FYR: Extended;
    FMax: Extended;
    FMin: Extended;
Jetzt sollte man annehmen, dass Extended auch Extended bleibt, und auch die Kommastellen mit übertragen werden.
Doch bereit nach der ersten Zeile wo in FYR 5,12343223 sind wir in FMin nur 5 abgelegt.
Ist 4,7734673 in FYR wird ebenfalls in FMin eine 5 abgelegt.

Logischerweise schlagen alle weiteren Vergleiche fehl, das in diesem speziellen Fall in FYR nur Werte von 4,75 bis 5,25 enthalten sein können.

Erklären kann ich es mir nicht. Ich brüte nun schon lange drauf rum, aber es erschließ sich mir nicht, wo der Fehler liegen sollte.

BUG 12. Okt 2015 14:13

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Um das von vornherein auszuschließen: Bist du dir ganz sicher, dass nicht deine Debugausgabe gerundet ist oder das in FYR wirklich nicht 5 steht?

Abgesehen davon würde die Funktion spektakulär fehlschlagen, wenn die Liste leer ist.

Captnemo 12. Okt 2015 14:44

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Also, wenn die Routine durch gelaufen wurde ist in FMin und Fmax immer glatt 5.

Und wenn ich im debugmodus durchsteppe, dann hab ich bei FYRauch immer nachvollziehbar Extendedwerte immer <> 5;

gammatester 12. Okt 2015 14:52

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Wahrscheinlich bin ich zu alt für diesen Kram, aber was genau ist denn self? Es muß array-Eigenschaften haben wg self[i], self[0]. Andererseits scheints auch ein Record zu sein wg. self.FMax.

nahpets 12. Okt 2015 14:59

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Moment, damit ich es richtig verstehe:

In FYR sind Werte von >= 4.75 bis <= 5.25?
Diese Werte werden im Debugger wie erwartet angezeigt?

Woher weißt Du, das FMin und FMax nachher = 5 sind?

In dem Quelltext kann ich keine Ausgabe der Werte erkennen.

Zeig' uns doch bitte mal die Werteausgabe (eventuell liegt ja erst dort der "Hund" begraben).

Captnemo 12. Okt 2015 15:00

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Ich hab doch geschrieben, dass es sich um eine Liste handelt. Genau eine TobjektList.

Hat aber m.M.n. mit dem Problem nix zu tun.

Union 12. Okt 2015 15:01

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Datentypen sämtlicher Variablen? Vollständiges Beispielprogramm?

Captnemo 12. Okt 2015 15:08

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Zitat:

Zitat von nahpets (Beitrag 1318417)
Moment, damit ich es richtig verstehe:

In FYR sind Werte von >= 4.75 bis <= 5.25?
Diese Werte werden im Debugger wie erwartet angezeigt?

Woher weißt Du, das FMin und FMax nachher = 5 sind?

In dem Quelltext kann ich keine Ausgabe der Werte erkennen.

Zeig' uns doch bitte mal die Werteausgabe (eventuell liegt ja erst dort der "Hund" begraben).

ü

Das im FYR diese Werte stehen sehe ich ja im debugger. Genauso dass in FMin und FMax eben nur 5 steht. Auch die beider IF-Bedingungen liefert immer False, und deren Anwesungen werden auch nie angesprungen.

Eine Ausgeberoutine in der Form gibt es im Objekt nicht, aber es wird später eine Skala aus den beiden Werten FMin und FMax erzeugt, die "unsinnigerweise" von 5 bis 5 geht.

nahpets 12. Okt 2015 15:17

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Was passiert bei diesen Zuweisungen?
Delphi-Quellcode:
self.FMax:=4.1;
self.FMin:=5.249;
Ergebnis wie erwartet oder auch beides Mal 5?

und bitte
Zitat:

Zitat von Union (Beitrag 1318419)
Datentypen sämtlicher Variablen? Vollständiges Beispielprogramm?

Aus dem bisher Vorhandenen lässt sich nicht erkennen, wo das Problem liegen könnte.

stahli 12. Okt 2015 15:23

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Hattest Du FMin und FMax zunächst mal als Integer angelegt und später das Projekt verschoben?
Vielleicht greifen Linker und Debugger auf unterschiedliche Versionen zurück?
Notfalls mal Projektkopien und dcu´s löschen/verschieben und Projekt bereinigen.

Aber vermutlich kannst Du Dir schon mal eine Wand suchen, gegen die Du später den Kopf hauen kannst. :stupid:

Captnemo 12. Okt 2015 15:39

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Mann André,

Hast du eine Wand die du zufällig nicht mehr brauchst? :wink:

Klar bereinigt hatte ich immer fleißig. Er löscht auch brav seine DCU's.....bis auf eine (Warum, weiß der Teufel). Manuelle gelöscht...alles Tutti ;-)

Jetzt wird natürlich die vorher so widerspenstige DCU beim Bereinigen auch gelöscht. Das verstehe wer will.

Danke aber an alle, die sich darüber einen Kopf gemacht habe. (Warum ich auf sowas "einfaches" nicht selber komme....muss am Alter liegen)

BUG 12. Okt 2015 15:39

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Zitat:

Zitat von gammatester (Beitrag 1318415)
Wahrscheinlich bin ich zu alt für diesen Kram, aber was genau ist denn self?

Es ist die Referenz auf das Objekt, das gibt es schon ewig :wink:
In C++ und davon inspirierten Sprachen entspricht das dem this-Zeiger.

gammatester 12. Okt 2015 15:45

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Zitat:

Zitat von BUG (Beitrag 1318425)
Zitat:

Zitat von gammatester (Beitrag 1318415)
Wahrscheinlich bin ich zu alt für diesen Kram, aber was genau ist denn self?

Es ist die Referenz auf das Objekt, das gibt es schon ewig :wink:
In C++ und davon inspirierten Sprachen entspricht das dem this-Zeiger.

Das ist schon klar, aber es ging um die Eigenschaften dieses Objects (habe für TObjecttList nix gefunden was dem obigen entspricht).

stahli 12. Okt 2015 15:55

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
@Captnemo
Das mit der Wand giltet nicht. Das war nur für den Fall gedacht, dass das Problem hausgemacht wäre. DCU löschen wäre ja Delphi-Aufgabe gewesen...

@gammatester+Schönling
Self wäre ja nur evtl. in einer Width-Anweisung notwendig (bei sonst möglichen gleich benannten Bezeichnern). Sonst ist es wohl reine Geschmacksache.
Außer bei der Default-Property "Self[x]". Da wird man ohne Self nicht weiter kommen.

p80286 12. Okt 2015 16:30

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Mit dem Self.irgendwas wußte ich zumindest gleich, was Captnemo vor hatte. Jetzt scheint es mir durchaus sinnvoll
Delphi-Quellcode:
self.count-1
statt eines simplen
Delphi-Quellcode:
Count-1
zu nutzen. Auch wenn es nicht sein muß!

Gruß
K-H

Captnemo 12. Okt 2015 17:01

AW: Aus Extended wird immer Integer (oder Delphi rundet selbstständig)
 
Zitat:

Zitat von stahli (Beitrag 1318428)
@Captnemo
Das mit der Wand giltet nicht. Das war nur für den Fall gedacht, dass das Problem hausgemacht wäre. DCU löschen wäre ja Delphi-Aufgabe gewesen...

Wie jetzt! Hab ich mir die 12 Kopfschmerztabletten etwa umsonst in den Kopp gekloppt?

Zitat:

Zitat von p80286 (Beitrag 1318432)
Mit dem Self.irgendwas wußte ich zumindest gleich, was Captnemo vor hatte. Jetzt scheint es mir durchaus sinnvoll
Delphi-Quellcode:
self.count-1
statt eines simplen
Delphi-Quellcode:
Count-1
zu nutzen. Auch wenn es nicht sein muß!

So halte ich das meistens aus. Zwar ertappe ich mich manchmal dabei, dass ich aus Faulheit mal weglasse (ist wieder ein Altersproblem), aber sonst versuche ich das, wo sinnvoll, auch mit zu schreiben.
Hat übrigens beim Debugging für mich den Vorteil, dass ich mit der Maus im der gleichen Zeile mir mal eben schnell andere Werte vom Self anschauen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.

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