![]() |
Warum ist 1.1 nicht gleich 1.1
Hallo,
ich frage eine Variable vom Typ double wie folgt ab:
Delphi-Quellcode:
WARUM ist der Ausdruck FALSE ???
tmp_double:=1.1;
if (tmp_double = 1.1) then showmessage('hallo'); DANKE kobel |
Re: Warum ist 1.1 nicht gleich 1.1
|
Re: Warum ist 1.1 nicht gleich 1.1
Doubles sind Fliesskommazahlen.
Eine Zuweisung von 1.1 kann u.u. einen Wert von 1.100000000000000000000000000000001 oder ähnliches im Double erzeugen (je nach aktueller Genauigkeit). Aber 1.100000000000000000000000000000001 ist nunmal nicht 1.1. Ergo false, da hat Delphi vollkommen recht ;-) Du musst hier auf eine ausreichende Genauigkeit runden bevor Du vergleichst bzw. du Subtrahierst die voneinander und vergleichst dann auf einen maximalen Differenzwert. z.B.
Delphi-Quellcode:
Edit Nachtrag: Wenn Du die Different als Absolutwert nimmst brauchst Du nur auf < zu vergleichen.
if (((1.1 - tmp_double) < 0.000001) AND ((1.1 - tmp_double) > -0.000001)) then
|
Re: Warum ist 1.1 nicht gleich 1.1
DANKE !
|
Re: Warum ist 1.1 nicht gleich 1.1
Delphi-Quellcode:
Geht auch und ist übersichtlicher. ;)
if abs(1.1 - tmp_double) < 0.000001 then
|
Re: Warum ist 1.1 nicht gleich 1.1
Das meinte ich ja mit Absolutwert in meinem Nachtrag. ;-)
|
Re: Warum ist 1.1 nicht gleich 1.1
...oder man nehme für solches auch diese 'CompareValue'-Funktion.
|
Re: Warum ist 1.1 nicht gleich 1.1
Alternativ und auch mit sinnvollem Namen: die Funktion 'isequal'
|
Re: Warum ist 1.1 nicht gleich 1.1
Zitat:
|
Re: Warum ist 1.1 nicht gleich 1.1
Zitat:
Imo ist die Frage durchaus berechtigt, wenn man es noch nicht weiß und mit Asm nichts anfangen kann, und die genaue Antwort fehlt bisher: Das Float-Literal wird als Extended gespeichert, womit dessen Genauigkeit größer als die der Double-Variable ist. Man müsste also entweder beide Argumente zuerst in Double-Variablen speichern (bei anderen Sprachen könnte man stattdessen auch einen Postfix benutzen, der das Literal als Double-Wert identifiziert) oder eben gleich SameValue benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 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