![]() |
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 |
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! |
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. |
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 |
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 |
Re: 25 ist kleiner als 25?
Delphi nicht aber was ist mit der CPU?
|
Re: 25 ist kleiner als 25?
Ähhh..dem kann ich jetzt nicht ganz folgen, bitte um Aufklärung...
Gruß Frank |
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).
|
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 .... |
Re: 25 ist kleiner als 25?
Schon mal versuch mit den gerundeten Werten zu arbeiten ?
Delphi-Quellcode:
http://www.delphipraxis.net/images/common/divider.jpg
If (Round(dblWeight) >= Round(FieldbyName('intFrom5').AsFloat)) and
(Round(dblWeight) < Round(FieldbyName('intFrom6').AsFloat)) Then Begin ... ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 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