Delphi-PRAXiS
Seite 1 von 2  1 2      

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 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