Entwickler-Ecke

Sonstiges (Delphi) - 27,99 kein gültiger Gleitkommawert ???


TrendyÄndy - Mi 18.08.04 00:15
Titel: 27,99 kein gültiger Gleitkommawert ???
Hallo Leute

Kleines Problem. Ich habe eine for-Schleife gebastelt, die Daten aus meinem formular sammelt, in einen record packt und anschliessend an einen webservice übermittelt. Funktioniert auch super, bis ich in das preisfeld einen preis mit komma eingebe. Die dazugehörige variable ist als REAL definiert.

Das komische ist, beim ersten durchlauf der schleife läuft alles prima und der webservice speichert auch die daten korrekt ab. Beim zweiten durchlauf wird eine Exception vom Typ EConvertError erzeugt. Was soll das ?


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:
procedure TForm1.Button1Click(Sender: TObject);
var awp: AuctionWeb_WSPortType;
    errc,errc2: integer;
    itid: widestring;
    errstr:widestring;
    header: item_header;
    inventory: item_inventory;
    itemdata: item;     
    i,j: integer;
    begin
    for i:=0 to 20 do
      begin
      if length(StringGrid1.Cells[i+1,1]) <> 0 then
        begin
        header := item_header.Create;
        inventory := item_inventory.Create;
        itemdata := item.create;
        with header do
          begin
          artikel:=ComboBox1.Text+' '+Artikelfeld.text+' '+StringGrid1.Cells[0,0]+' '+StringGrid1.Cells[i+1,0];
          preis:=StrToFloat(preisfeld.text);  //hier wird die exception ausgelöst beim 2 durchlauf
          grafiklink:=grafiklinkfeld.text;
          user_def1:=user_def1feld.text;
          usepay:='N';
          shop_item:='N';
          end;
        with inventory do
          begin
          free_quantity:=StrToInt(StringGrid1.Cells[i+1,1]);
          lister_ignore:=false;
          shop_ignore:='N';
          acc_ignore:=false;
          inventory_active:=true;
          end;
        with itemdata do
          begin
          item_header:=header;
          item_inventory:=inventory;
          end;
      awp:=GetAuctionWeb_WSPortType(True);
      awp.addItem(28,'94383784',100,1,5258144,'kdmchhdk',itemdata,errc,itid);
      Label1.Caption:=itid;
      awp.getErrorString(28,'94383784',10,1,5258144,'kdmchhdk',errc,'de',errc2,errstr);
      end;
      end;
      Label2.Caption:=errstr;
      Preisfeld.Text:='';
      GrafiklinkFeld.Text:='';
      Artikelfeld.Text:='';
      User_def1feld.Text:='';
      for j:=0 to 20 do StringGrid1.Cells[i+1,1]:='';
end;


sieht jemand nen Fehler oder sitzt ein kleiner mann bei mir im rechner, der willkürlich entscheidet, was REAL ist und was nicht ? Gruß - André


Matthias-K - Mi 18.08.04 00:20

an welcher stelle tritt den der fehler auf?

das wäre hilfreich!

mfg matthias


Delete - Mi 18.08.04 01:07

Nimm mal den Punkt als dezimal Separator.


hansa - Mi 18.08.04 03:31

Verwende am besten die vordefinierte Konstante "DecimalSeparator". Das wäre in D ein , und in US ein . Je nachdem, wie das Betriebssystem eingestellt ist.

Niemals so etwas im Klartext angeben :!:


TrendyÄndy - Mi 18.08.04 10:09

Hansa ICH DANKE DIR :-) DecimalSeparator := ','; funktioniert. Läufts alles bestens


Muetze1 - Mi 18.08.04 11:49

Moin!

Und um die von Hansa angesprochene Sprachenkompatibilität zu gewährleisten kannst du auch folgendes machen:

Ich vermute mal du verwendest Edit Felder um die Zahlen vom Benutzer eingeben zu lassen:


Delphi-Quelltext
1:
2:
3:
4:
5:
Procedure Tfrm_Calculation_Params.EditFieldKeyPress(Sender: TObject; Var Key: Char);
Begin
  If ( Key In ['.'','] ) Then
    Key := DecimalSeparator;
End;


So ist es dann immer der richtige Separator bei der Eingabe.

MfG
Muetze1