Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 25 ist kleiner als 25? (https://www.delphipraxis.net/12701-25-ist-kleiner-als-25-a.html)

FBrust 2. Dez 2003 16:54


25 ist kleiner als 25?
 
Hallo,

in meinem Programm steht folgender Code:

Code:
if (dblWeight >= FieldbyName('intFrom5').AsFloat) and
                     (dblWeight < FieldbyName('intFrom6').AsFloat) then begin ...

Die Variablen haben folgende Inhalte:

dblWeight: 25,
intFrom5 : 15,
intFrom6 : 25,

Alle Variablen sind vom Typ float bzw. numeric.

Die erste Bedingung, also 25 >= 15 wird noch korrekt ausgewertet (true), aber die zweite Bedingung, die mit diesen Werten 25 < 25 lautet, wird auch mit true ausgewertet, so dass das Programm in den then-Zweig läuft.

Meine Frage: Müsste da nicht False rauskommen, 25 ist doch nicht kleiner als 25, oder? :gruebel:

Vielleicht habt ihr einen Tip.


Grüße
Frank

r_kerber 2. Dez 2003 16:59

Re: 25 ist kleiner als 25?
 
Hallo Frank,

wo kommt der Wert für dblWeight her? Falls Du diesen irgendwie berechnest, kann es doch sein, dass er den Wert 24,99999999999999 annimmt. Das ist rund 25 aber eben kleiner 25!

Sanchez 2. Dez 2003 17:01

Re: 25 ist kleiner als 25?
 
hallo,
Eventuell liegts an der Genauigkeit der Float-Zahlen. Ein Numeric ist glaub ich kleiner als double, wenn ich mich jetzt nicht irre.

FBrust 2. Dez 2003 17:08

Re: 25 ist kleiner als 25?
 
Hallo Sanchez,

danke für Deine Antwort.

Könnte tatsächlich sein, da muss ich mal sehen, inwieweit ich die Werte auf einen gemeinsamen Nenner bringen kann (evtl. muss ich Vor- und Nachkommastellen getrennt auswerten...).

Grüße

Frank

FBrust 2. Dez 2003 17:12

Re: 25 ist kleiner als 25?
 
Hallo r_kerber,

nun ja, wenn in dblWeight 24,99999999 drinsteht, dann wird doch ebendieser Wert zum Vergleich herangezogen und nicht auf 25 aufgerundet, oder?

Anders gesagt, wenn ich mir den Inhalt von dblWeight mit FloatTostr anzeigen lasse und es steht 24,99999 drin, dann werden auch 24,99999 angezeigt. Alles andere würde bedeuten, dass Delphi automatisch aufrundet und das glaube ich nicht.


Grüße

Frank

Luckie 2. Dez 2003 17:18

Re: 25 ist kleiner als 25?
 
Delphi nicht aber was ist mit der CPU?

FBrust 2. Dez 2003 17:25

Re: 25 ist kleiner als 25?
 
Ähhh..dem kann ich jetzt nicht ganz folgen, bitte um Aufklärung...

Gruß
Frank

r_kerber 2. Dez 2003 17:54

Re: 25 ist kleiner als 25?
 
Die CPU rechnet binär. Und bei der Umwandlung von/in's Dezimalformat gibt es Rundungsfehler. Und natürlich rundet Delphi auch und zwar genau dann, wenn die Zahl formatiert angezeigt werden werden soll (z.B. mit 2 Nachkommastellen).

trifid 2. Dez 2003 18:18

Re: 25 ist kleiner als 25?
 
Hallo,

geh einfach davon aus, dass in der Datenbank-Schicht immer was anderes steht
als wie im Register des Prozessors.
Wenn Du nun einen Vergleich abbilden möchtest, dann geht das genauer,
indem Du nach einer Differenz fragst, die einen bestimmten Fehler haben könnte.

Für Dich bedeutet das also, wenn Du einen Fehler von 1/1000 nehmen würdest
Delphi-Quellcode:
   if (Abs (dblWeight - FieldbyName('intFrom5').AsFloat) > 0.001) AND
      (Abs (dblWeight - FieldbyName('intFrom6').AsFloat) > 0.001) then
   begin
      ....

himitsu 2. Dez 2003 18:28

Re: 25 ist kleiner als 25?
 
Schon mal versuch mit den gerundeten Werten zu arbeiten ?

Delphi-Quellcode:
If (Round(dblWeight) >= Round(FieldbyName('intFrom5').AsFloat)) and
  (Round(dblWeight) < Round(FieldbyName('intFrom6').AsFloat)) Then Begin ...
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif


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