Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Kaufmännische Runden geht nicht ! (https://www.delphipraxis.net/178926-kaufmaennische-runden-geht-nicht.html)

Davidlocke13 4. Feb 2014 11:07

Kaufmännische Runden geht nicht !
 
Hallo,
ich will Kaufmännische Runden auf 2 Nachkommastellen!

Dafür habe ich folgendes Programm gebastelt:

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

function RoundUp(X: double): double;
begin
   Result := Trunc(X) + Trunc (Frac(X) * 2);
end;

function RoundX(const Value:double; const NK:Integer):double;
var
   multi: double;
begin
   multi := IntPower(10, NK);
   Result := RoundUp(Value*multi) / multi;
end;


procedure TForm3.Button1Click(Sender: TObject);
var
  x: Double;
begin
  x := StrToFloat(Edit1.Text);
  Edit2.Text := FloatToStr(RoundX(x, 2));
end;

procedure TForm3.Button2Click(Sender: TObject);
var
  Y: Double;
begin
  Y:= StrToFloat(Edit3.Text);
  Edit4.Text:= FloatToStr(Round(Y));
end;

end.
Ergebnisse der Rundung die ich bekomme:

16,5556 --> 16,56 Ergebnis stimmt !
16,56455 --> 16,56 was raus kommen sollte: 16,57
16,121313 --> 16,12 was raus kommen sollte: 16,13

Also wenn die Zahlen am Ende kleiner als 5 sind wird nicht aufgerundet!
Was muss ich ändere damit ich das gewünschte Ergebnis bekomme?

Liebe Grüße

Davidlocke13 4. Feb 2014 11:10

AW: Kaufmännische Runden geht nicht !
 
Sorry der Teil ist was Extra, sollte nicht dazu gehören:
Delphi-Quellcode:
procedure TForm3.Button2Click(Sender: TObject);
var
  Y: Double;
begin
  Y:= StrToFloat(Edit3.Text);
  Edit4.Text:= FloatToStr(Round(Y));
end;

Mikkey 4. Feb 2014 11:16

AW: Kaufmännische Runden geht nicht !
 
Was Du willst, ist offenbar nicht "kaufmännisches Runden", sondern immer aufrunden?

Dann sollte Roundup so aussehen:

Delphi-Quellcode:
function RoundUp(X: double): double;
begin
   Result := Trunc(X);
   if Frac(X) <> 0 then
     Result := Result + 1;
end;

fkerber 4. Feb 2014 11:16

AW: Kaufmännische Runden geht nicht !
 
Hi,

für mich sieht das alles korrekt nach kaufmännischem Runden aus.
Willst du vielleicht immer aufrunden?

Bei welchem Zahlen sollte bei dir denn abgerundet werden?


Viele Grüße,
Frederic

Davidlocke13 4. Feb 2014 11:21

AW: Kaufmännische Runden geht nicht !
 
Ich will immer aufrunden, was im übrigen Kaufmännisch am besten ist !

Mach ja keine sinn sinn wenn ich 16,3211 auf 16,32 runde, da mache ich 0,0011 Cent Verlust !

fkerber 4. Feb 2014 11:25

AW: Kaufmännische Runden geht nicht !
 
http://de.wikipedia.org/wiki/Rundung...nisches_Runden

Viele Grüße,
Frederic

Davidlocke13 4. Feb 2014 11:27

AW: Kaufmännische Runden geht nicht !
 
Oh dachte das ist Arithmetisch Runden !

Kaufmännische ist dann wohl doch nicht so gut wenn ich Preise berechnen will ;-)

Klaus01 4. Feb 2014 11:30

AW: Kaufmännische Runden geht nicht !
 
Vielleicht tut es das:
Delphi-Quellcode:
kein_bankers_round := ceil(value * 100)/100;
ceil

Grüße
Klaus

Davidlocke13 4. Feb 2014 11:40

AW: Kaufmännische Runden geht nicht !
 
Danke mit der Funktion geht es ;-)

Delphi-Quellcode:
function RoundUp(X: double): double;
begin
   Result := Trunc(X);
   if Frac(X) <> 0 then
     Result := Result + 1;

gammatester 4. Feb 2014 13:00

AW: Kaufmännische Runden geht nicht !
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1246597)
Danke mit der Funktion geht es ;-)

Delphi-Quellcode:
function RoundUp(X: double): double;
begin
   Result := Trunc(X);
   if Frac(X) <> 0 then
     Result := Result + 1;

Wirklich? Finde ich eigentlich nicht: roundx(-11.555,2) ergibt damit -11.54 statt -11.56.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.
Seite 1 von 2  1 2      

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