Autor |
Beitrag |
Becks16
      
Beiträge: 405
|
Verfasst: Fr 20.10.06 20:45
hallo
ich habe folgendes problem
ich möchte die preise richtig formatieren das er sie auch richtig anzeigt wie es sein muss. Nun habe ich folgendes problem
also ich möchte z.b. 923 das es so aus sieht 923,00
wenn ich diese 923,00 addieren möche mit einer zahl die auch in dem zahlenbereich ist geht das auch mit dem addieren
aber wenn ich
z.b. diese zahl 2345 so mache das es so aussieht 2.234,00
und diese zahlen addieren schmeißt er mich raus und sagt " 2.234,00 ist kein gültiger gleitkommawert " wie kann ich das abstellen ?
hier mal der quelltext
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| if edit_preisschornstein.Text <> '' Then a := StrToFloat(edit_preisschornstein.Text) else a:=0;
if Edit1.Text <> '' Then b := StrToFloat(Edit1.Text) else b:=0;
c := a+b; edit_listenpreisgesamt.Text := Format('%6.2n',[c]); |
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 20.10.06 21:57
ich würd mal sagen der '.' und das ',' verwirrt ihn! vor dem umwandeln, '.' weg und statt ';' einen '.'.
hoff ich mal!^^
mfg el
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 20.10.06 22:57
gar nicht.
erst rechnen, dann formatieren und ausgeben. dies ist die zauberformel.
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: Sa 21.10.06 09:22
moin moin
das muss auch so gehen es würde ja schon reichen wenn er das so aus gibt 2540,00 das wäre ausreichend so müsste er dann bestimmt auch rechnen
aber wie geht das
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Sa 21.10.06 11:17
Becks16 hat folgendes geschrieben: | moin moin
das muss auch so gehen es würde ja schon reichen wenn er das so aus gibt 2540,00 das wäre ausreichend so müsste er dann bestimmt auch rechnen
aber wie geht das
mfg |
Hallo,
was heisst "es muss auch so gehen?"? Wenn du es von vornherein besser weisst als die Ratgeber hier, dann brauchst du nicht zu fragen, und da du keinen Rat annimmst, lohnt es sich auch nicht, sich eine Antwort zu überlegen.
Der Rat ist absolut richtig.
Gruss Reinhard
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: Sa 21.10.06 11:25
wieso nehme ich keinen rat an das ist doch quatsch was du da sagst. Klar kann ich es nach dem rechnen formatieren dann sehen die lstenpreise die ich addieren möchte so aus (1234 statt 1234,00) und ich möchte die zahlen ja nachher auch aus drucken und da will ich das so hin kriegen das er er mir die zahlen richti wie sich das gehört aus schreibt ...
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 21.10.06 12:06
// So geht's:
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:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c : extended; newstrA,newstrB : String; const delstr : String = '.';
begin
edit_preisschornstein.Text:='15.678,00'; Edit1.Text:='23.456,00'; newstrA:= StringReplace(edit_preisschornstein.Text,delstr, '', [rfIgnoreCase]); newstrB:= StringReplace(Edit1.Text,delstr, '', [rfIgnoreCase]);
a:=0; try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end; b:=0; try B := StrToFloat(newstrB); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
edit_listenpreisgesamt.Text := FloatToStrF(a+b,ffNumber,8,2); end; |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: Sa 21.10.06 12:56
erst mal schönen dank hathor jetzt rechnet er damit. Ich beschreib die ganze sache mal noch bissen genauer
ich habe ein dbfeld wo der listenpreis drin steht und dann ein edit feld wo ich die menge eingebe diese beiden felder multiplieziert er dann und da kommt dann der preis raus, und wenn ich dann auf dem button berechne drücke soll er mir den gesamt listenpreis aus den editfeldern aus rechnen. Ich gebe dann dazu noch einen verkaufs preis ein und dann rechnet er mit den rabatt einmal in % aus und einmal in Euro.
Außerdem muss es so sein das wenn ein preis leer ist das er denn nicht rausspringt sonder eben nur den einen wert einträgt. Das funkioniert ja auch so weit eben nur nicht das ich mit tausender rechnen kann.
hier mal der Quelltext wie ich es momentan habe
bei der variante wie du sie hast übernimmt er ja automatisch immer den demowert auch wenn ich die felder leer lasse
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:
| rocedure Tf_schornstein.btn_berechnenClick(Sender: TObject); var a, b,d,e,f, c: real; begin if edit_preisschornstein.Text <> '' Then a := StrToFloat(edit_preisschornstein.Text) else a:=0;
if Edit1.Text <> '' Then b := StrToFloat(Edit1.Text) else b:=0;
c := a+b; edit_listenpreisgesamt.Text := Format('%6.2n',[c]);
if edit_verkaufspreis.Text = '' then ShowMessage ('Es ist nichts zu berechnen da ') else begin
a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b*100/a-100; edit_rabatt.Text := FloatToStr(c);
a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b-a; edit_rabattgeld.Text := Format('%6.2n',[c]); end; |
habe das jetzt mal so geändert jetzt springt er mir raus wenn ich ein edit feld leer lasse wenn in beiden was drin ist geht das wunder bar hier mal der 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:
| procedure Tf_schornstein.btn_berechnenClick(Sender: TObject);
var a,b,c : extended; newstrA,newstrB : String; const delstr : String = '.'; begin
if edit_preisschornstein.Text <>'' then newstrA:= StringReplace(edit_preisschornstein.Text,delstr, '', [rfIgnoreCase]); a:=0; try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
if Edit1.Text<>'' then newstrB:= StringReplace(Edit1.Text,delstr, '', [rfIgnoreCase]); b:=0; try B := StrToFloat(newstrB); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
edit_listenpreisgesamt.Text := FloatToStrF(a+b,ffNumber,8,2);
if edit_verkaufspreis.Text = '' then ShowMessage ('Es ist nichts zu berechnen da ') else begin
a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b*100/a-100; edit_rabatt.Text := FloatToStr(c);
a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b-a; edit_rabattgeld.Text := Format('%6.2n',[c])
end;
end; |
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 21.10.06 13:27
Zitat:
Delphi-Quelltext 1: 2:
| a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); |
Den Variablen wurden doch schon RICHTIGE Werte zugewiesen, warum dann noch einmal die FALSCHEN ???
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: Sa 21.10.06 14:12
hmm wie meinst du das genau ? bis zum feld Listenpreisgesamt rechnet er mir das ja richtig aus so und dann bei verkaufspreis gebe ich selber den verkaufspreis ein und dann muss er ja wieder weiter rechnen ...
und wieso geht das nicht wenn ich ein feld leer lasse ??
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: Sa 21.10.06 17:18
Ich habe mal versucht das erst beim QuickReport zu formatieren da kann man im ObjektInspektor und MASK das ganze formatieren funktionier ja auch aber wenn ich auf dem Formular das Feld leer lasse macht er da automatisch 0,00 hin und das soll eben auch nicht sein
kann mann das denn auch so formatieren 1234,00 statt 1.234,00 vll kann man denn so besser rechnen
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 21.10.06 19:27
Hallo,
ohne Tausender-Punkt
Delphi-Quelltext 1: 2: 3:
| FloatToStrF(1234.567,FfFixed,8,2); Format('%6.2f',[1234.567]); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 21.10.06 19:28
Letzte Chance, Dein eigenes Denken auf Touren zu bringen:
WAS SOLL EIGENTLICH DIESER B...SINN???
Zitat:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b*100/a-100; edit_rabatt.Text := FloatToStr(c);
a := StrToFloat(edit_listenpreisgesamt.Text); b := StrToFloat(edit_verkaufspreis.Text); c := b-a; edit_rabattgeld.Text := Format('%6.2n',[c]) |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
Zuletzt bearbeitet von hathor am Sa 21.10.06 22:00, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 21.10.06 19:36
hathor hat folgendes geschrieben: | Letzte Chance, Dein eigenes Denken auf Touren zu bringen:
WAS SOLL EIGENTLICH DIESER BLÖDSINN??? |
Bitte mäßige Deinen Tonfall!
Außerdem haben wir Quote-Tags für Zitate und Delphi-Tags für Sourcecode. Bitte nutze beides entsprechend.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: So 22.10.06 07:17
wieso soll das blödsinn sein ?? wenn ich diese werte nun mal in meinen programm brauche ist das eben so da kann ich auch nichts für.
im erstem feld gibt er mehr den listenpreis aus
im zweiten gebe ich selber den verkaufspreis ein
und daraus ergibt sich denn einer gewisser rabatt
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: So 22.10.06 17:02
Ich habe jetzt so weit alles hin bekommen das er mir den rabatt aus rechnet das geht so weit. Aber das letzt problem was ich noch habe ist das wenn ein Editfeld leer ist das er mich dann aus dem Programm schmeißt ( folgende fehlermeldung "ist kein gültiger gleitkommawert")
hier mal der quelltext
habt ihr vielleicht eine ahnung woran das liegen kann ??
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:
| procedure Tf_schornstein.btn_berechnenClick(Sender: TObject);
var a,b,c : extended; newstrA,newstrB : String; const delstr : String = '.'; begin
if edit_preisschornstein.Text <>'' then newstrA:= StringReplace(edit_preisschornstein.Text,delstr, '', [rfIgnoreCase]); a:=0; try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
if Edit1.Text<>'' then newstrB:= StringReplace(Edit1.Text,delstr, '', [rfIgnoreCase]); b:=0; try B := StrToFloat(newstrB); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
edit_listenpreisgesamt.Text := FloatToStrF(a+b,ffNumber,8,2);
if edit_verkaufspreis.Text = '' then ShowMessage ('Es ist nichts zu berechnen da ') else begin
newstrA:= StringReplace(edit_listenpreisgesamt.Text,delstr, '', [rfIgnoreCase]); try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
newstrb:= StringReplace(edit_verkaufspreis.Text,delstr, '', [rfIgnoreCase]); try B := StrToFloat(newstrB); except on Exception : EConvertError do ShowMessage(Exception.Message); end; edit_rabatt.Text := FloatToStrF(b*100/a-100,ffNumber,8,2);
newstrA:= StringReplace(edit_listenpreisgesamt.Text,delstr, '', [rfIgnoreCase]); try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end;
newstrb:= StringReplace(edit_verkaufspreis.Text,delstr, '', [rfIgnoreCase]); try B := StrToFloat(newstrB); except on Exception : EConvertError do ShowMessage(Exception.Message); end; edit_rabattgeld.Text := FloatToStrF(b-a,ffNumber,8,2);
end;
end; |
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
greenhorn
      
Beiträge: 68
D5
|
Verfasst: So 22.10.06 17:10
versuchs mal mit
Delphi-Quelltext 1:
| if edit.text <> '' then ... |
|
|
Becks16 
      
Beiträge: 405
|
Verfasst: So 22.10.06 17:57
das hab ich doch oder an welcher stelle meinst du ?
mfg
_________________ Ich bin Dumm und weiss nichts
|
|
raiguen
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: So 22.10.06 21:53
greenhorn hat folgendes geschrieben: | versuchs mal mit
Delphi-Quelltext 1:
| if edit.text <> '' then ... | |
Becks16 hat folgendes geschrieben: | das hab ich doch oder an welcher stelle meinst du ?
mfg |
Der Fehler bzw die Fehlermeldung liegt hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if edit_preisschornstein.Text <>'' then newstrA:= StringReplace(edit_preisschornstein.Text,delstr, '', [rfIgnoreCase]); a:=0; try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end; |
Denkanstoß bzw -hilfe:
1. newstrA ist zwar initialisiert, aber ist leer
2. newstrA bleibt leer, wenn die Abfrage if edit_preisschornstein.text <> '' false ist (also im Editfeld nichts drin steht)
3. mit dem leeren String versuchst du dann eine TypCasting, und der läuft natürlich auf nen Hammer !!
Abhilfe (ebenfalls als Denkanstoß):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if edit_preisschornstein.Text <>'' then begin newstrA:= StringReplace(edit_preisschornstein.Text,delstr, '', [rfIgnoreCase]); a:=0; try A := StrToFloat(newstrA); except on Exception : EConvertError do ShowMessage(Exception.Message); end; end; |
|
|
|