Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Nicht nachvollziehbare Invalid floating point operation

  Alt 29. Okt 2010, 21:20
Der Fehler ist der Datentyp für Round().

X := Round(10); ergibt auch ein EInvalidOP.
X := Round(10.0); ergibt kein EInvalidOP.

Wie bei Image1.Height wird die 10 zu einem Integer, Round erwartet aber einen Real-Typen (Double, Extended etc.).

Bei
X := Round((5.4097598831e+17 / (2 * 13.685690504)) * 497); .
wurde 497 zu einem Extended, da hier an die anderen Konstanten angepasst wird (werden darf), die vom Compiler durch den Dezimalseparator bereits als Extended erkannt wurden.

***

Der Compiler wertet zuerst den Ausdruck aus und nimmt den einfachsten passenden Datentyp (Integer vor Real), danach kommt der Funktionsaufruf Round(). Das ist der Grund, warum der Compiler quasi dem Code ein Bein stellt.

Warum der Ausdruck
(5.4097598831e+17 / (2 * 13.685690504)) * Image1.Height .
zu einem nicht umcastbaren Integer wird und
Round(Image1.Height) .
vom Compiler zu einem Real gecastet wird, wäre dann meine nächste Frage

Geändert von Satty67 (29. Okt 2010 um 21:52 Uhr)
  Mit Zitat antworten Zitat