Round

Verweis: RoundTo
Uses: System
Eingabe: kommaZahl(extended,single..)
Ausgabe: gerundeteGanzzahl(Integer,int64)
Funktion: Rundet einen Flieskommawert auf eine Ganzzahl

Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen 3 Label untereinander auf die Form. Zusätzlich bräuchten wir noch einen TButton.

procedure TForm1.FormActivate(Sender: TObject);
  //3 Flieskomma Variabelen deklarieren
  var
  Wert: array[1..3] of double;
  test: integer;
begin
   //Variablen Beschriften
  Wert[1]:=38.4415;
  Wert[2]:=38.5415;
  Wert[3]:=38.6415;
  // den Captions zuweisen
  Label1.Caption:='War 38.4415 ist jetzt:'+IntToStr (Round(Wert[1]));
  Label2.Caption:='War 38.5415 ist jetzt:'+IntToStr (Round(Wert[2]));
  Label3.Caption:='War 38.6415 ist jetzt:'+FloatToStr (Round(Wert[3]));
end;

Label1 = War 38.4415 ist jetzt: 38
Label2 = War 38.4415 ist jetzt: 39
Label3 = War 38.4415 ist jetzt: 39
Round funktioniert mit kaufmännischem Runden Zahlenwerte von 0 bis 4 hinter dem Komma werden abgerundet, Zahlen von 5 bis 9 aufgerundet. Ich habe hier mal Variablen als statische Array deklariert. Array sind für gleichförmige und gleichbedeutende Variablen geeignet.Der Befehl IntToStr macht aus einem Integer -Wert (Ganzzahl) einen String. Aber Moment, Habe ich nicht weiter oben die Variable als Double angegeben.Ja, richtig aber Round verändert nicht nur den Wert sondern Auch den Typ der Variable, diese ist nun eine Ganzzahl. Wenn sie nun diese Zeile:

Label1.Caption:='War 38.4415 ist jetzt:'+IntToStr (Round(Wert[1]));

in das hier ändern:

Label1.Caption:='War 38.4415 ist jetzt:'+IntToStr (Wert[1]);

dann gibt es diese Fehlermeldung:

unit1.pas(45,61) Error: 
Incompatible type for arg no. 1: Got "Double", expected "QWord"

Was dann so viel heißt: Ich erwarte einen ganzen Wert wie Qword (oder eben auch integer) aber Sie geben mir einen Fließkommawert. Nun ist bewiesen: Round ändert auch den Typ.

Label3.Caption:='War 38.6415 ist jetzt:'+FloatToStr (Round(Wert[3]));

Hier sieht man übrigens das FloatToStr auch ganze Zahlen verarbeiten kann ohne zu meckern. Jedoch ist das Subobtimal. Das heißt: Ja es geht, aber es frisst Ressourcen und Zeit. Dies aber bei einmaligen Auruf nicht so schlimm. Erst wenn man ein großes Array auswertet kann der Rechner unnötig in die Knie gezwungen werden.