Entwickler-Ecke

Sonstiges (Delphi) - Die Stellen nach dem Komma nur auf .00 und .50 runden


sms-ag - Di 15.10.02 23:52
Titel: Die Stellen nach dem Komma nur auf .00 und .50 runden
Gibt es hier eine einfache Lösung?

Ich muss unterschiedlich grosse Zahlenwerte z.B. "5896,15895" oder "1589,894561594" jeweils nach den ersten beiden Stellen nach dem Komma nur auf die Werte .00 und .50 runden. Bei dem ersten Zahlenbeispiel wäre das "5896,00" und bei dem zweiten "1589,50"

D.h. Die 2 Stellen nach dem Komma von .01 - .49 zu .00 runden und von .51 - .99 auf .50 runden.

Die Zahl vor dem Komma bleibt unverändert. Die Anzahl der Nachkommastellen ist variabel.

Die Werte werden dann in eine Datenbank geschrieben und in einem DBGrid angezeigt (Paradox)


Klabautermann - Mi 16.10.02 00:06

Hallo,

du könntest z.B. Frac verwenden. Dieses liefert dir den Nachkommawert.
In deinen Fall könnte das intewar so aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
FUNCTION HalbRund(Wert : Real) : Real;
BEGIN
  IF (Frac(Wert) < 0.5) THEN
    Result := Trunc(Wert)
  ELSE
    Result := Trunc(Wert) + 0.5;
END;


Gruß
Klabautermann

PS: Trunc Schneidet die Nachkommastellen ab.


LCS - Mi 16.10.02 08:37

Hi
Wenn die Anzahl der Nachkommastelle variabel sein soll kannst du auch das verwenden:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function Runden(const Betrag: extended; const Stellen: integer): extended;
var
  Faktor, Wert  : extended;
begin
  Faktor   := IntPower(10, Stellen);
  if Betrag > 0 then
    Wert  := int( Betrag * Faktor + 0.5 )
  else
    Wert  := int( Betrag * Faktor - 0.5 );
  Wert  := Wert / Faktor;
  Result  := Wert;
end;


Gruss Lothar