Entwickler-Ecke

Sonstiges (Delphi) - Delphi programmierung


Anja - Mi 04.06.03 19:39
Titel: Delphi programmierung
ICh brauche Hilfe ich hab was programmiert. Ausrehcnung von mehrwertsteuer!

Nun bringt er mir aber keine Komastellen was hab ich falsch gemacht!

MEin Quellcode!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    txtNetto: TEdit;
    Label3: TLabel;
    txtSteuer: TEdit;
    Label4: TLabel;
    BNetto: TButton;
    BBrutto: TButton;
    BSteuer: TButton;
    RadB: TRadioGroup;
    Rad7: TRadioButton;
    Rad16: TRadioButton;
    txtBrutto: TEdit;
    procedure BNettoClick(Sender: TObject);
    procedure BSteuerClick(Sender: TObject);
    procedure BBruttoClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function Netto_Berechnen(MWST:integer;b:integer):integer;
Begin
  Result:=round(b*MWST/(100+Mwst));
end;

Function Steuer_Berechnen(MWST:integer;n:integer):integer;
Begin
  Result:=round(n*MWST/100);
end;

Function Brutto_Berechnen(n:integer;st:integer):integer;
Begin
  Result:=n+st;
end;

procedure TForm1.BNettoClick(Sender: TObject);
var
s:string;
begin
      s:=txtBrutto.text;
      If  Rad16.Checked then txtNetto.text:=IntToStr(Netto_Berechnen(16,StrToInt(s)));
      If  Rad7.Checked then txtNetto.text:=IntToStr(Netto_Berechnen(7,StrToInt(s)));


end;

procedure TForm1.BSteuerClick(Sender: TObject);

var
s:string;
begin
      s:=txtNetto.text;
      If  Rad16.Checked then txtSteuer.text:=IntToStr(Steuer_Berechnen(16,StrToInt(s)));
      If  Rad7.Checked then txtSteuer.text:=IntToStr(Steuer_Berechnen(7,StrToInt(s)));


end;

procedure TForm1.BBruttoClick(Sender: TObject);

begin
     txtBrutto.text:=IntToStr(Brutto_Berechnen(StrToInt(txtNetto.text),StrToInt(txtSteuer.text)));
end;

end.



Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt


Christian S. - Mi 04.06.03 19:42

Deine Funktion "Steuer_berechnen" hat als Rückgabewert einen Integer. Da kann es ja gar keine Nachkommastellen geben. Mach den Rückgabewert mal als Real und lass das Round weg.

MfG,
Peter

P.S.: UNBEDINGT Delphi-Tags verwenden! Am Besten sofort per "Edit" noch zum Beitrag hinzufügen.

//Edit: Achja, der Titel Deines Threads ist nicht gerade toll, denn ich möchte wette, dass sich in diesem Delphi-Forum noch der eine oder andere Thread sich mit Delphi-Programmierung beschäftigt.


Anja - Mi 04.06.03 20:12

kannst du mir mal bitte genau aufschreiben wo ich das ändern muss?


Christian S. - Mi 04.06.03 20:21

Meinst Du jetzt im Quelltext oder im Thread?

Naja, ich beschreib einfach beides. Erstmal der Quelltext. Folgende Funktion verwendest Du:


Delphi-Quelltext
1:
2:
3:
4:
Function Steuer_Berechnen(MWST:integer;n:integer):integer;
Begin
Result:=round(n*MWST/100);
end;


damit die Nachkommastellen zurückgibt, musst Du sie so umschreiben:

Delphi-Quelltext
1:
2:
3:
4:
Function Steuer_Berechnen(MWST:integer;n:integer):Real;
Begin
Result:=n*MWST/100;
end;


Dann liefert Dir die Prozedur auch Nachkommastellen zurück.

Dann musst Du aber auch noch folgende Prozedur ändern, weil IntToStr bei Nicht-Integern nicht funktionieren kann:
alte Version:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.BSteuerClick(Sender: TObject);

var
s:string;
begin
s:=txtNetto.text;
If Rad16.Checked then txtSteuer.text:=IntToStr(Steuer_Berechnen(16,StrToInt(s)));
If Rad7.Checked then txtSteuer.text:=IntToStr(Steuer_Berechnen(7,StrToInt(s)));


end;

Neue Version:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.BSteuerClick(Sender: TObject);

var
s:string;
begin
s:=txtNetto.text;
If Rad16.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(16,StrToInt(s)));
If Rad7.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(7,StrToInt(s)));


end;


So, und jetzt, wie man den Thread ändern kann!: bei dem allerersten Postung müsstest Du rechts neben dem Titel den Button "edit" haben. Klick drauf. Dann änderst Du den Titel und schreibst vor den Quelltext "[ delphi ]" und nach dem Quelltext "[/ delphi ]". Allerdings ohne die Leerzeichen dazwischen. Dann auf Absenden klicken.

MfG,
Peter


Anja - Mi 04.06.03 20:34
Titel: MWST
funktioniert noch nciht!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    txtNetto: TEdit;
    Label3: TLabel;
    txtSteuer: TEdit;
    Label4: TLabel;
    BNetto: TButton;
    BBrutto: TButton;
    BSteuer: TButton;
    RadB: TRadioGroup;
    Rad7: TRadioButton;
    Rad16: TRadioButton;
    txtBrutto: TEdit;
    procedure BNettoClick(Sender: TObject);
    procedure BSteuerClick(Sender: TObject);
    procedure BBruttoClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function Netto_Berechnen(MWST:integer;b:integer):real;
Begin
  Result:=round(b*MWST/(100+Mwst));
end;

Function Steuer_Berechnen(MWST:integer;n:integer):real;
Begin
  Result:=round(n*MWST/100);
end;

Function Brutto_Berechnen(n:integer;st:integer):real;
Begin
  Result:=n+st;
end;

procedure TForm1.BNettoClick(Sender: TObject);
var
s:string;
begin
      s:=txtBrutto.text;
      If  Rad16.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(16,StrToInt(s)));
      If  Rad7.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(7,StrToInt(s)));


end;

procedure TForm1.BSteuerClick(Sender: TObject);

var 
s:string
begin 
s:=txtNetto.text; 
If Rad16.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(16,StrToInt(s))); 
If Rad7.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(7,StrToInt(s))); 




end;

procedure TForm1.BBruttoClick(Sender: TObject);

begin
     txtBrutto.text:=FloatToStr(Brutto_Berechnen(StrToInt(txtNetto.text),StrToInt(txtSteuer.text)));
end;

end.


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt


Christian S. - Mi 04.06.03 20:41

(1) Könntest Du Delphi-Tags verwenden?
(2) Könntest Du noch schreiben, wie der Fehler lautet, den er anzeigt?

MfG,
Peter


Anja - Mi 04.06.03 20:43
Titel: fehlermeldung
mit kommastellen er kanne s nicht keine ahnung wieso!

55,55 ist ken gültiger integerwert


Anja - Mi 04.06.03 20:45
Titel: Fehler
Ich glaube die prozeduren stimmen nciht


Christian S. - Mi 04.06.03 21:02

Also, ich habe jetzt mal bei mir ein Projekt mit Deinem Quelltext erstellt. Du musst zuallererst aus allen Funktionen das "Round" herausnehmen. Denn das macht ja aus einem Realwert einen Integerwert, ist also genau das, was Du nicht haben willst.

Dann bin ich mir nicht sicher, ob die Berechnungen alle korrekt sind.

MfG,
Peter


Christian S. - Mi 04.06.03 21:05

Die Nettoberechnung ist, glaube ich, falsch.

Deine version:
(b * mwst)/(100+mwst)

Ich glaube, so sollte es sein:
(b*100)/(100 + mwst)

MfG,
Peter


Anja - Mi 04.06.03 21:15
Titel: fehler
zeigt immer ncoh ein integer fehler


Christian S. - Mi 04.06.03 21:18

Hm, du musst natürlich aufpassen, dass vor jedem Buttonklick auch nur Integerwerte in den Feldern stehen, die er einliest. Sonst versucht er ja eine Kommazahl in einen Integer umzuwandeln!


Anja - Mi 04.06.03 21:20
Titel: komma
da muss auch ne kommazahl eingegeben werden wie mahc ich das?


hansa - Mi 04.06.03 21:22

poste mal den Code, wie er jetzt ist. Das da ist so gut wie nichts. Ich meine jetzt das Problem. Und die Delphi-Tags sind schon wichtig. So wie es jetzt da steht kann mans kaum lesen. So muß das aussehen:

Zitat:
[delphiX]hier ist der sourcecode [/delphiX]


Wobei das X bei Delphi weggelassen werden muß. Das habe ich nur reingemacht, damit Du den Text an sich siehst, wie er aussieht, wenn Du ihn eintipst.


Christian S. - Mi 04.06.03 21:22

Okay, ganz pauschal:

Du änderst in jedem Funktionskopf die Variablen, die als Integer deklariert wurden in Real um und benutzt überall dort, wie StrToInt vorkommt StrToFloat.

Dann sollte wir schon ein gutes Stück weiter. Und demänchst BITTE die Delphi-Tags!


tommie-lie - Mi 04.06.03 21:24

Auch von mir nochmal der Hinweis, die Delphi-Tags zu benutzen und den Titel des Topics zu ändern.
Wie ersteres geht hat ja mein Vorposter schon genauestens erklärt, letzteres geht, indem du bei deinem ersten Beitrag ganz oben rehts auf "edit" klickst. Dann erscheint das Fenster zum Bearbeiten des Postings und dort kannst du den Titel ändern. Danach einfach nochmal auf "Absenden" klicken, dann hast du den neuen Titel.

Edit: ui ist hier der Andrang groß, mittlerweile hat das mit den Tags schon mein Vorborposter erläutert ;-)


Anja - Mi 04.06.03 21:35
Titel: fehler
zeigt mir an da es kein gleitkommawert ist!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
Function Netto_Berechnen(MWST:real;b:real):real;
Begin
  Result:=b*MWST/(100+Mwst); // (b*100)/(100 + mwst)

end;

Function Steuer_Berechnen(MWST:real;n:real):real;
Begin
  Result:=n*MWST/100;
end;

Function Brutto_Berechnen(n:real;st:real):real;
Begin
  Result:=n+st;
end;

procedure TForm1.BNettoClick(Sender: TObject);
var
s:string;
begin
      s:=txtBrutto.text;
      If  Rad16.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(16,StrToFloat(s)));
      If  Rad7.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(7,StrToFloat(s)));


end;

procedure TForm1.BSteuerClick(Sender: TObject);

var 
s:string;
begin 
s:=txtNetto.text;
If Rad16.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(16,StrToFloat(s)));
If Rad7.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(7,StrToFloat(s)));




end;

procedure TForm1.BBruttoClick(Sender: TObject);

begin
     txtBrutto.text:=FloatToStr(Brutto_Berechnen(StrToFloat(txtNetto.text),StrToFloat(txtSteuer.text)));
end;

end.


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt


Anja - Mi 04.06.03 21:43
Titel: gleitkommafehler
wie bekomm ich den gleitkommafehlerweg


Tweafis - Mi 04.06.03 21:44

Hi, gewöhn dir bitte an den Delphi Tag zu benutzen. Dein Code ist sonst unlesbar... Einfach oben auf den Button Delphi klicken, den Code reinpasten oder -schreiben und dann nochmal auf den Delphi-Button klicken. du kannst das ganze natürlich auch in den delphi-Tag einschließen, indem du vor den Code [delphi*] und hinter den Code [/delphi*] schreibst (jeweils ohne *).

Fis


Anja - Mi 04.06.03 21:48


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
Function Netto_Berechnen(MWST:real;b:real):real;
Begin
  Result:=b*MWST/(100+Mwst); // (b*100)/(100 + mwst)

end;

Function Steuer_Berechnen(MWST:real;n:real):real;
Begin
  Result:=n*MWST/100;
end;

Function Brutto_Berechnen(n:real;st:real):real;
Begin
  Result:=n+st;
end;

procedure TForm1.BNettoClick(Sender: TObject);
var
s:string;
begin
      s:=txtBrutto.text;
      If  Rad16.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(16,StrToFloat(s)));
      If  Rad7.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(7,StrToFloat(s)));


end;

procedure TForm1.BSteuerClick(Sender: TObject);

var
s:string;
begin
s:=txtNetto.text;
If Rad16.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(16,StrToFloat(s)));
If Rad7.Checked then txtSteuer.text:=FloatToStr(Steuer_Berechnen(7,StrToFloat(s)));




end;

procedure TForm1.BBruttoClick(Sender: TObject);

begin
     txtBrutto.text:=FloatToStr(Brutto_Berechnen(StrToFloat(txtNetto.text),StrToFloat(txtSteuer.text)));
end;

end.


also so aber zeigt immer ncoh ein gleitkommafehler an


Tweafis - Mi 04.06.03 21:49

wo ist denn der Fehler (zeile)??

Fis


Anja - Mi 04.06.03 21:51
Titel: gleitkomma
er zeigt bei der eingabe von zahlen gleitkomma fehler an


Tweafis - Mi 04.06.03 21:57

Gib mal die Zahlen mit , statt . ein.

(Falls du vorher nen . benutzt hast)
Fis


Anja - Mi 04.06.03 22:09

es funktioniert danke anja


Tweafis - Mi 04.06.03 22:18

falls du das noch machen willst (das man statt , auch . eingeben kann), dann:


Delphi-Quelltext
1:
2:
3:
4:
function StrToFloatPt(const s: string): extended;
begin
  Result := StrToFloat(StringReplace(s,'.',',', [rfReplaceAll]));
end;


und das halt immer statt StrToFloat benutzen.

(Getestet)

Fis


tommie-lie - Do 05.06.03 00:01

Oder DecimalSeparator auf das entsprechende Zeichen setzen (siehe OnlineHilfe, StrToFloat).


Anja - Do 05.06.03 06:35
Titel: kommastellen
wie kann ich es machen das er mir jetzt nur auf 2 kommastellenrundet?

Anja


Delete - Do 05.06.03 06:39

Kuck mal in der Hilfe unter FloatToStrF oder unter Format.


Tweafis - Do 05.06.03 08:17

tommie-lie hat folgendes geschrieben:
Oder DecimalSeparator auf das entsprechende Zeichen setzen (siehe OnlineHilfe, StrToFloat).


Oh, hab ich nicht gesehen (*nichthilfegelesen*). So kann man halt beides eingeben (, und .).

Fis


Anja - Do 05.06.03 11:12
Titel: komma

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.BNettoClick(Sender: TObject);
        var
        s       :string;

        begin

                s:=txtBrutto.text;
                If  Rad16.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(16,StrToFloat(s)));


                If  Rad7.Checked then txtNetto.text:=FloatToStr(Netto_Berechnen(7,StrToFloat(s)));


end;

2 stellen nach dem komma anzeigen. Mit dem Befehl FloatToStrF klappt es nicht!

Anja


Delete - Do 05.06.03 11:17
Titel: Re: komma
Anja hat folgendes geschrieben:

2 stellen nach dem komma anzeigen. Mit dem Befehl FloatToStrF klappt es nicht!

Stimmt. Klappt einfach nicht. :roll:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var
  f : Extended;
begin
  f := 2.2596987859;
  ShowMessage(FloatToStrF(f, ffNumber, 182));
end;


Anja - Do 05.06.03 11:20
Titel: Komma
hm na ja so richtig funktioniert das nicht!


Delete - Do 05.06.03 11:22

*putz wiener wisch hauch rubbel*

Falls jemand fragt, was ich hier mache: Ich putze gerade meine Glaskugel, die geht irgendwie nicht mehr so richtig. :x


Tweafis - Do 05.06.03 11:26

Du kannst auch mit Format arbeiten, z.B. so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  f : Extended;
  stellen: integer;
begin
  f := 2.2596987859;
  stellen := 3;
  ShowMessage(Format('%.*f',[stellen,f])); // auf stellen stellen runden
  // oder
  // ShowMessage(Format('%.2f',[f])); // auf 2 stellen runden
end;


Tweafis - Do 05.06.03 11:29

Luckie hat folgendes geschrieben:
*putz wiener wisch hauch rubbel*

Falls jemand fragt, was ich hier mache: Ich putze gerade meine
Glaskugel, die geht irgendwie nicht mehr so richtig. :x


:mrgreen::mrgreen:

@Anja: Das Beispiel von Luckie geht ausgezeichnet...