Moin...
Kommt darauf an, wofür man die Zahl braucht. Trunc rundet immer gegen null (zero). Das bedeutet 4.899999 ergibt glatt 4.8, was definitv falsch ist.
Wenn es für ein reines Abschneiden der Zahl zur Anzeige ist mag das Okay sein, ein runden ist es aber nicht.
Irgendwo habe ich gelesen, dass die Delphi-Funktionen zum runden teilweise einen Schatten haben (nicht immer richtig arbeiten) und da habe ich mir folgendes ausgedacht. Rundet kaufmännisch.
Delphi-Quellcode:
// Stellen default = 0 -> Keine Nachkommastellen!
function Runden(wert: extended; stellen: integer = 0):extended;
var integerWert: integer;
format: string;
i: integer;
temp: string;
begin
wert:=wert*power(10,stellen);
if wert > 0 then
begin
wert:=wert+0.51;
SetRoundMode(rmDown); // Art und Weise wie gerundet wird.
end
else if wert < 0 then
begin
wert:=wert-0.51;
SetRoundMode(rmUp); // Art und Weise wie gerundet wird.
end
else if wert = 0 then
begin
SetRoundMode(rmNearest); //Nochmal die Art und Weise.
end;
integerwert:=round(wert);
wert:=integerwert/power(10,stellen);
if stellen = 0 then
Format:='#0'
else
begin
for i:=1 to stellen do
begin
Format:=Format+'0';
end;
Format:='#0.'+Format;
end;
temp:=FormatFloat(Format, wert);
Result:=StrToFloat(temp);
end;
Ist getestet und sollte zuverlässig arbeiten.
[BTW: Wenn jeman einen Fehler entdeckt bin ich durchaus an Verbesserungsvorschlägen interessiert]
bis denne...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?