7 11 Stimmen

Delphi/Lazarus: 3 Wege um eine Zahl auf X Nachkommastellen zu runden

Tutorial von Delphianer | Letztes Update am 23.08.2018 | Erstellt am 19.02.2014

Die meisten Nutzer von Delphi oder auch Lazarus denken an die Funktion Round, wenn es um das runden einer Zahl geht. Leider kann man diese Funktion allerdings nicht dazu verwenden, einige Nachkommastellen der Ausgangszahl zu behalten. Mit Round kann man die Zahl 1,2345 nur auf 1 runden, nicht aber auf eine (1,2), zwei (1,23) oder drei Nachkommastellen (1,235).

Wie man genau dies in Delphi oder Lazarus erreichen kann, möchte ich euch heute in diesem Tutorial zeigen.

RoundTo

Am einfachsten geht es mit der Funktion RoundTo, die in der Unit Math enthalten ist:

k := 1.2345;
k := RoundTo(k, -2);  // k = 1.23

Als ersten Parameter übergeben wir unsere Zahl, die wir runden möchten, als zweiten Parameter die Anzahl der Nachkommastellen, die wir behalten möchte. An dieser Stelle müssen wir übrigens einen negativen Wert (hier -2) benutzen, um auf die Nachkommastellen zu runden. Positive Werte runden nicht auf Nachkommastellen sondern zum Beispiel auf Hunderter oder Tausender-Stellen: RoundTo(12345, 2) = 12300.

Eigene Funktion

Ältere Versionen der IDE können die RoundTo-Funktion noch nicht enthalten. Für diesen Fall können wir einfach die folgende Rechnung verwenden, um auf unser Ergebnis zu kommen:

x := 1.2345;
k := round(x*100)/100;    // 1.23
k := round(x*1000)/1000;  // 1.235

Verallgemeinert und ausgelagert als Funktion ergibt sich folgendes:

function RoundEx(const AInput, APlaces): extended;
var
  k: extended;
begin
  k := power(10, APlaces);
  result := round(AInput*k)/k;
end;

Dieser Funktion müssen wir nur unsere Zahl und die Anzahl der Nachkommastellen übergeben und können sie danach benutzen wie RoundTo.

Eine Erweiterung dieser Funktion habe ich in diesem Delphi und Lazarus Runden-Tutorial vorgestellt. Mit der dort vorgestellte Funktion, kann man in beide Richtungen runden: sowohl auf eine beliebige Anzahl von Nachkommastellen als auch auf Stellen vor dem Komma.

Direkt als String ausgeben

Als dritte Methode möchte ich euch nicht vorenthalten, die ihr eine Kommazahl direkt und gerundet als String ausgeben könnt:

x := 1.2345;
s := FormatFloat('0.00', x);           // 1.23
s := FormatFloat('0.000', x);          // 1.235
s := FormatFloat('0.000000', x);       // 1.234500
s := FormatFloat('0.######', x);       // 1.2345
s := FloatToStrF(x, ffFixed, 11, 2);   // 1.23
s := FloatToStrF(x, ffFixed, 11, 3);   // 1.235

Wir können dazu zum Beispiel die Funktionen FormatFloat oder FloatToStrF verwenden.

FormatFloat übergeben wir als ersten Parameter das Format, als zweiten Parameter die Zahl. Verwenden die eine 0 im Format, wird diese Stelle auf jeden Fall ausgegeben. Verwenden wir die Raute #, wird diese Stelle nur bei Bedarf ausgegeben.

FloatToStrF bietet viele Möglichkeiten, eine Zahl zu formatieren. In unserem Fall reicht wie im Beispiel als ersten Parameter die Zahl zu übergeben und als letzten die Anzahl der gewünschten Nachkommastellen.

AntwortenPositivNegativ

Über den Autor

Avatar AutorDer Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen | Nachricht

 

Ähnliche Themen

PHP: Zahlen runden
Tutorial | 0 Kommentare

Wichtiger Hinweis

Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.