Bei dem Code

showmessage(FloatToStr(
20E30));
 
erhält man
2E31 als Anzeige.
Das ist soweit OK, denn
20E30 ist ja auch gleich 2E31.
Allerdings bringt der Code

var
  a, b: Extended;
begin
  a := 20E30;
  b := 2E31;
  if a = b then showmessage('gleich')
  else showmessage('ungleich');
end;


die Anzeige "ungleich" und

showmessage(FloatToStr(a - b))

ergibt sogar die Differenz von 1099511627776 ($10000000000), was an der internen
bitweisen Vergeichsweise liegt. Solange die Werte unterhalb von
MaxDouble liegen,
kann man statt
Extended einfach den Typ Double verwenden um solche Fehler zu
vermeiden. Ansonsten muss man einen kleinen Trick anwenden:

function wandeln(z: Extended): Extended; 
begin 
  Result := StrToFloat(FloatToStr(z)); 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  a, b: Extended; 
begin 
  a := wandeln(20E30); 
  b := wandeln(2E31); 
  if a = b then showmessage('gleich') else showmessage('ungleich'); 
  showmessage(FloatToStr(a - b)) 
end; 



Zugriffe seit 6.9.2001 auf Delphi-Ecke