Einzelnen Beitrag anzeigen

Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Runden auf eine Nachkommastelle

  Alt 23. Dez 2003, 08:41
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?
  Mit Zitat antworten Zitat