![]() |
Deklaration MWST - Achtung:Totaler NOOB!
Ich muss für den Informatikunterricht ein Bruttoberechnungsprogramm schreiben, in welchem die MwSt schon deklariert/festgelegt ist. Ich habe gegooglet wie ne Irre und finde immer was mit
//const mwst=16 aber es klappt nie. Außerdem, sobald ich in meinem Programm eine Zahl im Nettofenster eingebe, kommt diese Fehlermeldung: " ist kein gültiger Gleitkommawert :wiejetzt: So sieht mein Code momentan aus:
Delphi-Quellcode:
[edit=alcaeus]Code mit Delphi-Tags formatiert. Mfg, alcaeus[/edit]
var
Form1: TForm1; vnetto, vbrutto, vmwst:single; const mwst=16.0; implementation {$R *.dfm} procedure TForm1.nettoChange(Sender: TObject); begin //Eingabe vnetto:=strtofloat(netto.Text); vmwst:=strtofloat(mwst.Text); //Verarbeitung vbrutto:=vnetto+vnetto*vmwst/100.0; //Ausgabe brutto.Text:=floattostr(vbrutto); end; procedure TForm1.Button1Click(Sender: TObject); begin brutto.Text:=floattostr(vbrutto); brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Vermutlich, weil das Edit am Anfang leer ist und den '' Wert ins OnChange Ereigniss übernimmt.
|
Re: Deklaration MWST - Achtung:Totaler NOOB!
uPs, sorry, danke alcaeus!
@Florian Bernd: Bin da noch ziemlich neu mit, was müsste ich jetzt ändern? *liebfrag* :oops: |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Hallo Jenny,
das erste Problem ist, das Du nicht 2 Sachen gleich benennen darfst. Hier hast Du das Edit MwSt und die Konstante MwSt genannt. Das funktioniert nicht. Nenn das Edit mal MwStEdit. Das nächste Problem ist, dass bei leerem Netto.Text strtofloat eine Exception auslöst, da ein leerer String nicht in eine Zahl umgewandelt werden kann. Fang das mit try..except ab. die Variablen vnetto,vmwst,vbrutto müssen nicht unbedingt global deklariert werden. Hier mal ein Codeschnipsel:
Delphi-Quellcode:
Grüsse
procedure TForm1.NettoChange(Sender: TObject);
var vnetto,vmwst,vbrutto: single; begin //Eingabe // falls netto.text keine zahl beinhaltet oder leer ist, dann vnetto := 0 try vnetto := strtofloat(Netto.Text); except vnetto := 0; end; //Verarbeitung vmwst := vnetto * (mwst / 100 ); vbrutto := vnetto * ((100+mwst) / 100); //Ausgabe (formatiert mit 2 Nachkommastellen und Tausender-Punkt) MwstEdit.Text := FormatFloat(',0.00',vmwst); Brutto.Text := FormatFloat(',0.00',vbrutto); end; ...Doc |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Ein paar dinge:
1. Ist das im Change ganz schlecht, weil, wenn du alles entfernst, er aus einem Leerstring ('') kein Float machen kann und eine Fehlermedlung ausgibt. Mein Vorschlag wäre: TryStrToFloat! 2.
Delphi-Quellcode:
Hier macht die erste zuweisung keinen Sinn!
procedure TForm1.Button1Click(Sender: TObject);
begin brutto.Text:=floattostr(vbrutto); brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0); end; 3. Button1.Click und nettoChange sind an sich das gleiche, außer das bei nettochange die Umwandlungen aufgesplittet sind. Noch eine kleine Erklärung zu "TryStrToFloat": TryStrToFloat erwartet den String und eine Floatvariable und gibt einen Boolean zurück, wenn es funktioniert. Der Wert, der bei StrToFloat herauskommt ist in der übergebenen Floatvariable enthalten.
Delphi-Quellcode:
procedure TForm1.bTry(Sender : TObject);
var ExtendedBuffer : Extended; // Extended ist eine Fließkommavariable begin if TryToStr(eText.text, ExtendedBuffer) {= true} then //das = true kann man im if weglassen Showmessage(FloatToStr(ExtendedBuffer) + ' haben sie eingegeben') else Showmessage('Ihr angegebener Wert war keine Fließkommazahl!'); end; |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Ich probiers heute abend, da mein Sohn gerade wach wird. Versteh zwar noch leicht Bahnhof, aber wird schon gehen, danke :) :) :)
|
Re: Deklaration MWST - Achtung:Totaler NOOB!
Okay haltet mich bitte nicht für blöde oder so... Aber ich raffs nicht! :(
Ich glaub mein Lehrer (der auch weiß, dass ich das kaum versteh) würde mich mit Fragen löchern, wenn ich das so schreibe... Weil soweit sind wir noch gar nicht (arbeiten mit den Unterlagen von datadidact). Aber sind doch die einzigen Möglichkeiten? |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Was genau verstehst du nicht?
|
Re: Deklaration MWST - Achtung:Totaler NOOB!
irgendwie alles :oops: also wie ich das jetzt bei mir ändern muss genau. Ich komm voll durcheinander grad :( :oops: :oops: :oops: :wall:
|
Re: Deklaration MWST - Achtung:Totaler NOOB!
Delphi-Quellcode:
Getiipt und nicht getestet.
procedure TForm1.nettoChange(Sender: TObject);
begin if netto.text = '' then Exit; //Eingabe if TryStrToFloat(netto.Text, vnetto) then begin //Nettoeingabe korrekt if TryStrToFloat(mwst.Text,vmwst ) then begin // //Mwst-Eingabe korrekt //Verarbeitung vbrutto:=vnetto+vnetto*vmwst/100.0; //Ausgabe brutto.Text:=floattostr(vbrutto); end else begin //Eingabe ist nicht ok ... end; end else begin //Eingabe ist nicht ok end; end; |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Was möchtest Du denn genau machen?
1. Soll auch der Mwst-Betrag in einem Edit ausgegeben werden? 2. Sollen sich diese Werte (MwSt-Betrag und Brutto-Betrag) sofort, also während der Eingabe des Netto-Betrages anzeigen, oder erst auf Knopfdruck? Beides zusammen macht nicht viel Sinn... Wenn ihr noch nicht mit try..except oder TryStrToFloat gearbeitet habt, ist die "auf Knopfdruck"-Variante besser, da es erst beim Knopfdruck zu einem Fehler kommen kann, ansonsten aber bei der Eingabe ständig zu Fehlern kommen könnte. 3. Hast Du vielleicht die genaue "Aufgabenstellung"? 4. Ist Dir try..except oder try..finally bekannt? 5. Ist Dir FormatFloat oder FloatToStrF bekannt? Grüsse ...Doc |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Bekannt sind mir u.a. halt die Begriffe wie "Strtofloat" und "Floattostr"...
Die Aufgabe heißt: "Geben Sie das Programm bruttoberechnung ein und ändern Sie es derart ab, dass die Mehrwertsteuer als Konstante deklariert wird." Da hab ich rumgegooglet und habs halt eingegeben dieses const mwst=16.0; gefunden.... |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Wenn ich das richtig verstehe, hast Du also bereits das fertige Programm "Bruttoberechnung" und sollst dies nur umändern?
Oder gehört die Entwicklung des Programms "Bruttoberechnung" dazu? |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Das Programm war in den Unterlagen etwas anders geschrieben, der Lehrer hat an die Tafel geschrieben, wie wir es programmieren sollen (er arbeitet etwas anders wie datadidact...). Und das habe ich abgeschrieben und genauso in den Code eingegeben. Versteh das auch nciht (außer das mit der const mwst=16.0;, das hat er nicht angeschrieben, gehört ja zur Aufgabe)
Omann ich glaub ich raff das nie... Gings euch auch mal so? :? |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Ok, das sieht so aus, als wenn es vorher ein Feld gab, nämlich "MwSt", in das man die Prozentzahl der MwSt eingeben sollte und jetzt soll das ganze nur mit einem festen Wert funktionieren. Verstehe zwar nicht ganz, warum man das Programm praktisch "zurückentwickelt", denn die flexible MwSt-Eingabe ist eigentlich besser. Aber gut. Ich ändere mal Deinen zuerst geposteten Quelltext und kommentiere diesen:
Delphi-Quellcode:
Allerdings gibt es jetzt immer noch das Problem, dass, wenn Du das Netto-Edit leer machst, oder Buchstaben eingibst, sofort eine Exception "kein gültiger Gleitkommawert" kommt. Ich kann mir eigentlich nicht vorstellen, dass das Programm so an die Tafel geschrieben wurde. Hast Du da schon was geändert? Sonst poste bitte nochmal das Original-Tafel-Programm.
var
Form1: TForm1; //vnetto, vbrutto, vmwst: single; // vmwst ist jetzt keine variable mehr, da const, also nur noch vnetto, vbrutto: single; //const //mwst=16.0; // wäre im Prinzip richtig, allerdings heißt das Eingabefeld (Edit) bereits mwst. //wir benutzen jetzt einfach den Namen der vorherigen Variable "vmwst" (die oben in var entfernt wurde) weiter, um weniger ändern zu müssen const vmwst = 16.0; implementation {$R *.dfm} procedure TForm1.nettoChange(Sender: TObject); begin //Eingabe vnetto:=strtofloat(netto.Text); //vmwst:=strtofloat(mwst.Text); dies ist dann nicht mehr erorderlich, da oben als Konstante deklariert //Verarbeitung vbrutto:= vnetto + vnetto * vmwst / 100.0; //Ausgabe brutto.Text := floattostr(vbrutto); end; procedure TForm1.Button1Click(Sender: TObject); begin brutto.Text:=floattostr(vbrutto); // Diese Zuweisung bringt nichts, da der Wert sofort wieder überschrieben wird //brutto.Text:=floattostr(strtofloat (netto.text)+strtofloat (netto.Text)*strtofloat(mwst.Text)/100.0); // strtofloat(mwst.Text) durch vmwst ersetzen brutto.Text := floattostr(strtofloat(netto.text) + strtofloat(netto.Text) * vmwst / 100.0); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. Ich würde mal schätzen, dass die Sachen, die Du unter "NettoChange" gepackt hast, eigentlich in "Button1Click" gehören. Kann das sein? Grüsse ...Doc |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Hallo Jenny, vielleicht solltest du einen Schritt zurückgehen und erst einmal die grundlagen der Programmierung und dann die Implementierung in Delphi anschauen.
Dieser Tipp ist nicht böse gemeint, aber ich habe den Eindruck, daß du das was der Lehrer an der tafel mache abpinselst und eingibst, aber nich verstehst was der Code genau macht. Oder irre ich mich? |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Daaankeschööön! So klangs jetzt wenigstens logisch :)
Ja der Haken wäre dann wirklich nur noch, dass sobald ich das Nettofeld leere diese Meldung kommt.... Und was ist mit dem Edit-Feld für die MwSt? Kann ich ja genausogut weglassen und den Button auch??? Also geändert habe ich nichts, habs genauso abgeschrieben wies an der Tafel stand, weil ich ja so kein Ahnung von dem Zeug hab. @mkinzler: Mittwoch gibts nen Extra-Kurs für diejenigen die noch so Probleme haben, hoffentlich hilfts! Weil in der Stunde erklärt er nicht so gerne von vorne wegen den anderen, dies schon können... :( Ich habs ja auch erstmal selbst versucht aber diese Aufgabe war halt was, worüber wir noch NIE im Unterricht gesprochen haben (bis jetzt nur Taschenrechner inkl. Quadrat- und Wurzelfunktion programmiert) |
Re: Deklaration MWST - Achtung:Totaler NOOB!
|
Re: Deklaration MWST - Achtung:Totaler NOOB!
Danke dir! Scheint ja ziemlich hilfreich zu sein, ich schaus mir morgen an in Ruhe, denn langsam wirds Zeit für mich, offline zu gehen.
Ich danke euch nochmal! :thumb: |
Re: Deklaration MWST - Achtung:Totaler NOOB!
Hallo Jenny,
also ich würde das ganze so machen, da ihr die "Try-Sachen" noch nicht hattet: Was jetzt in NettoChange steht, in Button1Click packen und das bisherige Button1Click entfernen. Somit wird erst auf Knopfdruck gerechnet. Das jetzige MwSt Feld ist somit überflüssig und könnte weg. Der Code würde dann so aussehen:
Delphi-Quellcode:
var
Form1: TForm1; vnetto, vbrutto: single; const vmwst = 16.0; implementation {$R *.dfm} procedure TForm1.nettoChange(Sender: TObject); begin // bitte leer machen! end; procedure TForm1.Button1Click(Sender: TObject); begin //Eingabe vnetto := strtofloat(netto.Text); //Verarbeitung vbrutto := vnetto + vnetto * vmwst / 100.0; //Ausgabe brutto.Text := floattostr(vbrutto); end; procedure TForm1.Button2Click(Sender: TObject); begin close; end; end. Somit rechnet Dir das Programm auf Knopfdruck den Brutto-Betrag mit der festen MwSt aus. ("// bitte leer machen! " nicht dahin schreiben, sondern wirklich leer machen...) Grüsse ...Doc |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
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