| Autor |
Beitrag |
Samkirchner
      
Beiträge: 16
|
Verfasst: Mo 05.05.08 12:21
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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: 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 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mo 05.05.08 12:37
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Samkirchner 
      
Beiträge: 16
|
Verfasst: 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
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
Zuletzt bearbeitet von Samkirchner am Mo 05.05.08 12:56, insgesamt 1-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: 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
_________________ Markus Kinzler.
|
|
Samkirchner 
      
Beiträge: 16
|
Verfasst: 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
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Mo 05.05.08 13:06
|
|
Samkirchner 
      
Beiträge: 16
|
Verfasst: Mo 05.05.08 13:13
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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?
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Samkirchner 
      
Beiträge: 16
|
Verfasst: Mo 05.05.08 13:15
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: 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.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
|