Difference between revisions of "Round/de"

From Free Pascal wiki
(Alternativen: Details on SetRoundMode)
(Beispiel: Code korrigiert)
Line 11: Line 11:
 
<syntaxhighlight>
 
<syntaxhighlight>
 
var
 
var
   i1, i2: Integer;
+
   i: Integer;
 
begin
 
begin
 
   WriteLn( Round(8.7) );
 
   WriteLn( Round(8.7) );
Line 32: Line 32:
 
2
 
2
 
4
 
4
1
+
12
 
13
 
13
 
</pre>
 
</pre>

Revision as of 12:56, 30 May 2018

Template:Translate

Rundet eine Fliesskommazahl auf eine Ganzzahl.

Round

Deklaration

function Round(X: Real): Longint;

Beispiel

Code

var
  i: Integer;
begin
  WriteLn( Round(8.7) );
  WriteLn( Round(8.3) );
  // Beispiele für "Banker-Runden" - .5 wird auf die nächste gerade Zahl eingestellt
  WriteLn( Round(2.5) );
  WriteLn( Round(3.5) );

  i := Round(12.50); // Rundet ab
  WriteLn(i);
  i := Round(12.51); // Rundet auf
  WriteLn(i);
end.

Ausgabe

9
8
2
4
12
13

Banker-Runden

Die Funktion Round verwendet das Banker-Runden und rundet daher bei 0,5 zur nächsten geraden Zahl. Daher ist die Wahrscheinlichkeit für Auf- und Ab- runden bei Zufallszahlen exakt 50:50.

Es eignet sich sehr gut für statistische oder finanzmathematische Anwendungen. Bei grafischen Anwendungen – zum Beispiel beim Zeichnen von Bildern – ist das nicht immer von Vorteil. Hierdurch zeichnet folgendes Beispiel keine durchgehende Linie, sondern eine Gepunktete.

Code:

var
  i: integer;
  x: single = 0.5;
begin
  for i := 0 to 99 do begin
    Canvas.Pixels[round(x), 20]:= $00;
    WriteLn('Input:', x: 6: 2, ' round: ', Round(x): 4);
    x := x + 1.0;
  end;
end;

Ausgabe

Input:    0.50 round:    0
Input:    1.50 round:    2
Input:    2.50 round:    2
Input:    3.50 round:    4
Input:    4.50 round:    4
....

Alternativen

Zum Abrunden kann Trunc verwenden werden.

Mit der Prozedur SetRoundMode(ARoundMode) aus der Unit Math kann der Rundungsmodus für alle folgenden Aufrufe von Round() eingestellt werden. Der Parameter ARoundMode kann folgende Werte annehmen:

  • rmNearest: Rundet zum nächsten Integer, bei x.5 zum nächsten geraden Integer (Banker's Rounding)
  • rmDown: Roundet generell zum nächstkleineren Integer
  • rmUp: Rundet generell zum nächstgrößeren Integer
  • rmTruncate: Schneidet die Dezimalstellen ab.

Der Unterschied zwischen rmDown und rmTruncate zeigt sich bei negativen Zahlen: Mit rmDown entsteht aus der Zahl -1.25 der Wert -2, während sich mit rmTruncate der Wert -1 ergibt.

Siehe auch