Autor Beitrag
Becks16
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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


ausblenden 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]);  //hier die formatierung



mfg

_________________
Ich bin Dumm und weiss nichts :-)
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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



BeitragVerfasst: Fr 20.10.06 22:57 
gar nicht.

erst rechnen, dann formatieren und ausgeben. dies ist die zauberformel.
Becks16 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Sa 21.10.06 11:17 
user profile iconBecks16 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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



BeitragVerfasst: Sa 21.10.06 12:06 
// So geht's:

ausblenden 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';  //demo-werte
Edit1.Text:='23.456,00';                  //demo-werte

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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Becks16 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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
ausblenden volle Höhe 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:
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]); // hier formatiert er das zu 1.234,00 und damit kann ich nicht rechnen 





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]);//FloatToStr(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
ausblenden volle Höhe 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:
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



BeitragVerfasst: Sa 21.10.06 13:27 
Zitat:
ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Becks16 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 21.10.06 19:27 
Hallo,

ohne Tausender-Punkt :arrow:
ausblenden Delphi-Quelltext
1:
2:
3:
FloatToStrF(1234.567,FfFixed,8,2);
//oder
Format('%6.2f',[1234.567]);

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.10.06 19:28 
Letzte Chance, Dein eigenes Denken auf Touren zu bringen:

WAS SOLL EIGENTLICH DIESER B...SINN???

Zitat:
ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von hathor am Sa 21.10.06 22:00, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 21.10.06 19:36 
user profile iconhathor 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: 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 ??

ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 68


D5
BeitragVerfasst: So 22.10.06 17:10 
versuchs mal mit

ausblenden Delphi-Quelltext
1:
if edit.text <> '' then ... //rechne					
Becks16 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 405



BeitragVerfasst: So 22.10.06 17:57 
das hab ich doch oder an welcher stelle meinst du ?

mfg

_________________
Ich bin Dumm und weiss nichts :-)
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: So 22.10.06 21:53 
user profile icongreenhorn hat folgendes geschrieben:
versuchs mal mit

ausblenden Delphi-Quelltext
1:
if edit.text <> '' then ... //rechne					


user profile iconBecks16 hat folgendes geschrieben:
das hab ich doch oder an welcher stelle meinst du ?

mfg


Der Fehler bzw die Fehlermeldung liegt hier:
ausblenden 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);  //--verursacht Fehler, wenn newstrA leer ist !!
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ß):
ausblenden 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;