fliegermichl hat geschrieben: Fr 9. Dez 2022, 17:19
Gibt es beim FPC eigentlich eine builtin Lösung um einen Wert auf eine bestimmte Anzahl Stellen zu runden?
RoundTo(Value, n):
https://www.freepascal.org/docs-html/rt ... undto.html.
Aber Achtung: n ist nicht die Zahl der Dezimalstellen, sondern diese muss als negative Zahl angegeben werden, denn 10^n ist die Genauigkeit nach dem Runden. Also, wenn man auf 2 Stellen nach dem Komma runden möchte, muss man RoundTo(value, -2) aufrufen, denn die Genauigkeit ist dann 0.01 = 10^-2. Genauso kann man natürlich auch auf Stellen vor dem Komma runden. RoundTo(value, 3) z.B. rundet auf volle Tausender.
Noch ein Achtung: Da das Ergebnis von Roundto ein Floatingpoint-Typ ist, bedeutet die Verwendung von RoundTo nicht, dass das Ergebnis nur die gewünschten Dezimalstellen enthält. Denn in der Regel ist das Ergebnis im Binärsystem nicht exakt darstellbar, und man bekommt die Zahl, die am nähesten an der gewünschten ist, und die hat halt evtl noch viele Nuller oder Neuer am Ende!
Wenn man nur für Ausgabezwecke runden möchte, muss man die String-Umwandlungs-Funktionen verwenden.
Code: Alles auswählen
program Project1;
uses
math;
var
x,y: Double;
begin
x := 1.34562;
y := RoundTo(x, -2);
WriteLn(y); // --> Ausgabe: 1.3500000000000001E+000
WriteLn(x:0:2); // --> Ausgabe: 1.35
ReadLn;
end.