Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Fehler E2015 falscher Operandentyp
Samkirchner - Mo 05.05.08 12:21
Titel: Fehler E2015 falscher Operandentyp
Hallo,
ich habe folgendes mir unklares Problem. Ich habe drei Textfelder, einen Button und eine Label gemacht. Nun will ich einen Dreisatz berechnen.
Der Code bzw. die Problemstelle lautet:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm4.cmdBerechnungDreClick(Sender: TObject); begin Merker := StrtoFloat ((txtdreiDrei*txtzweiDrei)/txteinsDrei);
end; |
Merker habe ich auf real deklariert
Er gibt mir jedoch falscher Operandentyp (E2015) an. In der Hilfe steht jedoch nicht arg viel was mir helfen könnte, daher dieser Thread.
Für eventuelle Hilf bzw. wieso dies falsch ist, wäre ich sehr dankbar.
LG Sam
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
iKilledKenny - Mo 05.05.08 12:27
Du kannst nicht Texte miteinander multiplizieren/dividieren. Du musst zuerst die Texte in eine Zahl umwandeln (z.B. mit StrToFloat) und dann die Rechenoperationen durchführen.
Samkirchner - Mo 05.05.08 12:34
Ok, danke! Also muss ich wirklich jeden Text einzeln umwandeln, denn ich dachte bisher das es reicht, wenn ich am Anfang einmal StrtoFloat schreibe. Gibt es da nicht noch ne schönere Lösung??? Ich meine da ich erst vor ein paar Tagen mit Delphi begonnen habe, versuche ich mir gleich die schönere Arten einzuprägen.
Zumal er mir mit
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm4.cmdBerechnungDreClick(Sender: TObject); begin Merker := StrtoFloat (txtdreiDrei)* StrtoFloat (txtzweiDrei)/ StrtoFloat (txttxteinsdrei);
end; |
überladene Version von StrtoFloat ausgibt :-(
Danke jedoch für deine schnelle Antwort
LG Sam
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
zuma - Mo 05.05.08 12:37
Titel: Re: Fehler E2015 falscher Operandentyp
was iKilledKenny meint, ist in etwa sowas:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm4.cmdBerechnungDreClick(Sender: TObject); begin Merker := StrtoFloat(txtdreiDrei) * StrtoFloat(txtzweiDrei) / StrtoFloat(txteinsDrei); end; |
Sauberer wäre es aber mit z.b 3 Var's (Zahl1, Zahl2, Zahl3), die immer bei der Eingabe belegt werden. Z.B. beim OnExit des Feldes mit der ersten Zahl prüfen, ob eine Zahl eingegeben wurde, wenn ja, diese in Zahl1 merken. Dasselbe mit den beiden anderen Feldern.
Dann könnte deine Berechnung so aussehen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm4.cmdBerechnungDreClick(Sender: TObject); begin Merker := Zahl1 * Zahl2 / Zahl3; end; |
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Samkirchner - Mo 05.05.08 12:53
Hm, ich glaube ich habe ein größeres Problem, denn es gehen beide Arten nicht wirklich.
Um alles zu sehen, stelle ich mal meinen kompletten Code rein, denn ich befürchte das da etwas anderes nicht stimmt, da er mir schon wieder folgendes bringt:
[Pascal Fehler] Unit4.pas(155): E2250 Es gibt keine überladene Version von 'StrToFloat', die man mit diesen Argumenten aufrufen kann
Das momentane Thema ist bei zeile 153
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: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242:
| unit Unit4;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;
type TForm4 = class(TForm) tab2: TPageControl; TabSheet1: TTabSheet; Label1: TLabel; txtEingabe: TEdit; cmd1: TButton; cmd2: TButton; cmdPlus: TButton; cmdErgebnis: TButton; cmd3: TButton; cmd4: TButton; cmd5: TButton; cmd6: TButton; cmd7: TButton; cmd8: TButton; cmd9: TButton; cmd0: TButton; cmdMinus: TButton; cmdMal: TButton; cmdGeteilt: TButton; cmdC: TButton; TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; TabSheet5: TTabSheet; TabSheet6: TTabSheet; txteinsdrei: TEdit; lblgleinsdrei: TLabel; txtzweiDrei: TEdit; txtdreiDrei: TEdit; Label2: TLabel; lblergebnis: TLabel; cmdBerechnungDre: TButton; procedure cmd1Click(Sender: TObject); procedure cmd2Click(Sender: TObject); procedure cmdPlusClick(Sender: TObject); procedure cmdErgebnisClick(Sender: TObject); procedure cmd3Click(Sender: TObject); procedure cmd4Click(Sender: TObject); procedure cmd5Click(Sender: TObject); procedure cmd6Click(Sender: TObject); procedure cmd7Click(Sender: TObject); procedure cmd8Click(Sender: TObject); procedure cmd9Click(Sender: TObject); procedure cmd0Click(Sender: TObject); procedure cmdMinusClick(Sender: TObject); procedure cmdMalClick(Sender: TObject); procedure cmdGeteiltClick(Sender: TObject); procedure cmdCClick(Sender: TObject); procedure cmdBerechnungDreClick(Sender: TObject);
private public end;
var Form4: TForm4; Zahl1, Zahl2, Zahl3,Merker,Rechner,Ergebnis: real; Rechenart : integer; test : boolean;
implementation
{$R *.dfm} procedure TForm4.cmd1Click(Sender: TObject); begin If test then txtEingabe.text := ''; test:=false;
txtEingabe.text := txtEingabe.Text + '1'; end;
procedure TForm4.cmd2Click(Sender: TObject); begin if test then txtEingabe.text := ''; test:= false;
txtEingabe.text := txtEingabe.Text + '2'; end;
procedure TForm4.cmd3Click(Sender: TObject); begin If test then txtEingabe.Text := ''; test := false;
txtEingabe.text:= txtEingabe.Text + '3'; end; procedure TForm4.cmd4Click(Sender: TObject); begin if test then txtEingabe.Text := ''; test:= false; txtEingabe.Text := txtEingabe.Text + '4'; end;
procedure TForm4.cmd5Click(Sender: TObject); begin if test then txtEingabe.text := ''; test:= false; txtEingabe.Text := txtEingabe.Text + '5'; end;
procedure TForm4.cmd6Click(Sender: TObject); begin if test then txtEingabe.Text :=''; test:= false; txtEingabe.Text := txtEingabe.Text + '6'; end;
procedure TForm4.cmd7Click(Sender: TObject); begin if test then txtEingabe.Text := ''; test := false; txtEingabe.Text := txtEingabe.Text + '7'; end;
procedure TForm4.cmd8Click(Sender: TObject); begin if test then txtEingabe.text := ''; test := false; txtEingabe.Text := txtEingabe.Text + '8'; end;
procedure TForm4.cmd9Click(Sender: TObject); begin if test then txtEingabe.Text := ''; test:= false; txtEingabe.Text := txtEingabe.Text + '9'; end;
procedure TForm4.cmdBerechnungDreClick(Sender: TObject); begin txteinsdrei := StrtoFloat (Zahl1); txtzweiDrei := StrtoFloat (Zahl2); txtdreiDrei := StrtoFloat (Zahl3); Merker := Zahl1 * Zahl2 / Zahl3;
end;
procedure TForm4.cmdCClick(Sender: TObject); begin txtEingabe.text := ''; end;
procedure TForm4.cmd0Click(Sender: TObject); begin if test then txtEingabe.Text :=''; test :=false; txtEingabe.Text := txtEingabe.Text + '0'; end;
procedure TForm4.cmdPlusClick(Sender: TObject); begin Merker:= strtofloat(txtEingabe.text); txteingabe.text := ''; Rechenart := 0; end;
procedure TForm4.cmdMalClick(Sender: TObject); begin Merker := StrToFloat (txtEingabe.Text); txtEingabe.Text := ''; Rechenart := 2; end;
procedure TForm4.cmdMinusClick(Sender: TObject); begin Merker := StrToFloat (txtEingabe.Text); txtEingabe.text := ''; Rechenart := 1; end;
procedure TForm4.cmdGeteiltClick(Sender: TObject); begin Merker := StrToFloat (txtEingabe.text); txtEingabe.Text := ''; Rechenart := 3; end;
procedure TForm4.cmdErgebnisClick(Sender: TObject); begin Test := true; case Rechenart of 0:begin Rechner := strtofloat(txteingabe.Text); ergebnis := merker + rechner; txteingabe.Text := floattostr(ergebnis); end; 1:begin Rechner := strToFloat (txtEingabe.text); ergebnis := merker - rechner; txtEingabe.text := FloatToStr (ergebnis); end; 2:begin Rechner:= strToFloat (txtEingabe.Text); ergebnis := merker * rechner; txtEingabe.Text := FloattoStr (ergebnis); end; 3:begin rechner := strToFloat (txtEingabe.Text); if rechner = 0 then label1.Caption := 'Fehler' else ergebnis := merker / rechner; txtEingabe.Text := FloatToStr (ergebnis); end; end;
end;
end. |
Sorry, wenn ich mich ein wenig dumm anstelle, aber Delphi ist neu für mich, da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige mache ich das erst seit ein paar Tagen.
LG Sam
Moderiert von
AXMD: Code- durch Delphi-Tags ersetzt
mkinzler - Mo 05.05.08 12:56
Zahlx ist ja schon eine Fließkommazahl. Es sollte wohl eher:
Delphi-Quelltext
1:
| txteinsdrei := FloatToStr (Zahl1); |
heißen
Samkirchner - Mo 05.05.08 13:04
Ok, der Compiler erkennt es nun, danke!!! Leider kommt nun ein Gleitkomma Fehler der wie folgt lautet:
Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EInvalidOp mit Meldung 'Ungültige Gleitkommaoperation'. Prozess Project2.exe (2348)
Man o Meter ist das kompliziert.
iKilledKenny - Mo 05.05.08 13:06
Ich denke eher andersrum:
Delphi-Quelltext
1:
| ZahlXYZ := StrToFloat (textXYZ); |
8)
Samkirchner - Mo 05.05.08 13:13
iKilledKenny hat folgendes geschrieben: |
Ich denke eher andersrum:
Delphi-Quelltext 1:
| ZahlXYZ := StrToFloat (textXYZ); |
8) |
Ja, so geht es!!! Wobei ich nicht verstehe, wieso er sich bei
Quelltext
1:
| txteinDrei.Text := FloattoString (Zahl1); |
aufhängt und bei
Delphi-Quelltext
1:
| ZahlXYZ := StrToFloat (textXYZ); |
nicht!!! Müsste doch eigentlich das selbe sein! *grübel*
Danke an alle die mir geholfen haben :-).
LG sam
Xion - Mo 05.05.08 13:13
Samkirchner hat folgendes geschrieben: |
da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige
|
cool, welchen beruf lernst denn du?
Samkirchner - Mo 05.05.08 13:15
Xion hat folgendes geschrieben: |
Samkirchner hat folgendes geschrieben: |
da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige
|
cool, welchen beruf lernst denn du? |
Anwendungsentwickler (bin aber erst im ersten Lehrjahr) :-)
jakobwenzel - Mo 05.05.08 13:24
Das eine macht aus einem String eine Zahl, und das andere halt das umgekehrte.
Warum du nicht 2 mal das selbe machen kannst ist ja eigentlich klar: Du kannst ja z.B. einen eingepackten Brief nicht nochmal einpacken (in einen Umschlag gleicher Größe, das passt ja gar nicht) und dann erwarten, dass er ausgepackt ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!