| Autor |
Beitrag |
Anja
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 19:39
ICh brauche Hilfe ich hab was programmiert. Ausrehcnung von mehrwertsteuer!
Nun bringt er mir aber keine Komastellen was hab ich falsch gemacht!
MEin Quellcode!
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 public 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 tommie-lie: Delphi-Tags hinzugefügt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 20:12
kannst du mir mal bitte genau aufschreiben wo ich das ändern muss?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 20:34
Titel: MWST
funktioniert noch nciht!
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 public 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 tommie-lie: Delphi-Tags hinzugefügt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: 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 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 20:45
Titel: Fehler
Ich glaube die prozeduren stimmen nciht
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 21:15
Titel: fehler
zeigt immer ncoh ein integer fehler
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 21:20
Titel: komma
da muss auch ne kommazahl eingegeben werden wie mahc ich das?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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.
_________________ Gruß
Hansa
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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 
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 21:35
Titel: fehler
zeigt mir an da es kein gleitkommawert ist!
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); 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 tommie-lie: Delphi-Tags hinzugefügt
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 21:43
Titel: gleitkommafehler
wie bekomm ich den gleitkommafehlerweg
|
|
Tweafis
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: 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
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
Anja 
      
Beiträge: 42
WIN xp
|
Verfasst: Mi 04.06.03 21:48
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); 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
|
|