Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Auf 2 stellen Runden (https://www.delphipraxis.net/102397-auf-2-stellen-runden.html)

Kuster Peter 27. Okt 2007 21:48


Auf 2 stellen Runden
 
Habe bisher mit Fox Pro gearbeitet und stehe auf dem Schlauch:


Runden: Ich will eine Zahl auf 2 Stellen runden, meine Test funktioniert nicht, es will einfach die Funktion roundto nicht akzeptieren:

Delphi-Quellcode:
var
  Form1: TForm1;
  rech1 : single;
  rech2 : single;
  rech3 : single;

implementation

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);
begin
      rech1 := 8;
      rech2 := 9;
      rech3 := rech1 / rech2;
      label1.Caption := floattostr(roundto(rech3, -2));
end;
Peter

Dax 27. Okt 2007 21:50

Re: Auf 2 stellen Runden
 
Delphi ist nun mal nicht FoxPro.
Delphi-Quellcode:
function Round(e: Extended; precision: Integer): Extended;
var factor: Extended;
begin
  factor := Power(10, precision);
  Result := Round(e * factor) / factor;
end;

DP-Maintenance 27. Okt 2007 21:57

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

Hawkeye219 27. Okt 2007 22:01

Re: Auf 2 stellen Runden
 
Hallo Peter,

du mußt die Unit Math in die USES-Anweisung aufnehmen, um die Funktion RoundTo nutzen zu können.

Gruß Hawkeye

Progman 27. Okt 2007 22:14

Re: Auf 2 stellen Runden
 
warum nimmst du nicht
Delphi-Quellcode:
FloatToStrF(Wert, ffFixed, 8, 2);
Das ergibt immer zwei korrekt gerundete Nachkommastellen.

eddy 28. Okt 2007 01:14

Re: Auf 2 stellen Runden
 
Hallo Leute,

mit dem Runden habe ich so meine Probleme.

Zum Beispiel wird aus 30,14500 beim runden immer 30,14000 statt 30,15000

aus 3,145 wird 3,15
aus 4,145 wird 4,14
... zum Testen jeweils um Eins erhöht
aus 31,145 wird 31,14
aus 32,145 wird 32,15


Hat jemand dafür eine Erklärung?


@Hawkeye:
Die Funktion RoundTo gibt es bei mir auch mit der Unit Math nicht.

mfg
eddy

Mackhack 28. Okt 2007 03:46

Re: Auf 2 stellen Runden
 
Ich glaube zu diesem Thema mit dem Kaufmännischen Rundungsverhalten von Delphi gabs schon mal min. einen Thread!

Versuch mal was zu finden mit der Suchfunktion!

grenzgaenger 28. Okt 2007 09:16

Re: Auf 2 stellen Runden
 
Zitat:

Zitat von eddy
Hallo Leute,

mit dem Runden habe ich so meine Probleme.

Zum Beispiel wird aus 30,14500 beim runden immer 30,14000 statt 30,15000

aus 3,145 wird 3,15
aus 4,145 wird 4,14
... zum Testen jeweils um Eins erhöht
aus 31,145 wird 31,14
aus 32,145 wird 32,15


Hat jemand dafür eine Erklärung?


@Hawkeye:
Die Funktion RoundTo gibt es bei mir auch mit der Unit Math nicht.

mfg
eddy

das ist das sogenannte Bankers Rounding, welches in der FPU implementiert ist, da die Round Funktion diese Funktion verwendet, wird es automatisch wie oben Formatiert. genaueres, in der OH.

bitsetter 28. Okt 2007 11:01

Re: Auf 2 stellen Runden
 
Zitat:

Zitat von eddy
Hallo Leute,

mit dem Runden habe ich so meine Probleme.


aus 31,145 wird 31,14

Hast du es schon mal mit
Delphi-Quellcode:
ShowMessage(Format('%.2f', [31.145]));
versucht?

Kuster Peter 28. Okt 2007 15:59

Re: Auf 2 stellen Runden
 
Hallo Leute

Aufgrund Euerer Antworten ist mir plötzlich eine Lösung eingefallen, die in allen Programmiersprachen funktioniert:

Klar Fox ist nicht Delphi, darum wechsle ich auch auf Delphi und verlasse das Fox, doch ich habe eine Lösung, die ich vom Fox her abgewandelt habe:

Beispiel:

Delphi-Quellcode:
var
  Form1: TForm1;
  rech1 : single;
  rech2 : single;
  rech3 : single;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
      rech1 := 8;
      rech2 := 9;
      rech3 := rech1 / rech2;
      label1.Caption := floattostr(round(rech3 * 100) / 100);
end;
Und wenn wir schon dabei sind, hier meine Lösung um auf 5 zu Runden, was man in der CH braucht:

Delphi-Quellcode:
var
  Form1: TForm1;
  rech1 : single;
  rech2 : single;
  rech3 : single;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
      rech1 := 2.75;
      rech2 := 55;
      rech3 := rech1 / rech2;
      label1.Caption := floattostr(round(rech3 * 20) / 20);
end;

Also vielen Dank für die Tipps, doch so unter uns, bin verdammt stolz, dass ich eine Lösung gefunden habe.

Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz