Hallo,
folgendes funktioniert (Zahlen kommen eigentlich von Funktionen, sind hier als Zahlen selbst eingefügt):
Delphi-Quellcode:
var
X: Extended;
begin
X := Round((5.4097598831e+17 / (2 * 13.685690504)) * 497);
ShowMessage(FloatToStr(X));
Das funktioniert keineswegs. Solange man einen konstanten Ausdruck übergibt, versucht der
Compiler diesen auszuwerten. Offenbar werden dabei nicht alle Fehler gemeldet (in diesem Fall die unmögliche Umwandlung des Extended-Wertes in einen ganzzahligen Wert), es wird stattdessen ein Fehlerwert zurückgegeben. Wenn der Ausdruck zur
Laufzeit berechnet werden muss, meldet die
RTL alle auftretenden Fehler:
Delphi-Quellcode:
var
X, Y: Extended;
begin
Y := Round(1E200);
ShowMessage (FloatToStr(Y)); // liefert -9,22337203685478E18 = Min(Int64)
X := 1E200;
Y := Round(X);
ShowMessage (FloatToStr(Y)); // liefert "Ungültige Gleitkommaoperation"
end;
Gruß Hawkeye