Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi problem bei simpler rechenfunktion... (https://www.delphipraxis.net/102805-problem-bei-simpler-rechenfunktion.html)

arest 5. Nov 2007 11:29


problem bei simpler rechenfunktion...
 
hallo allerseits,

tut mir leid, dass ich euch mit solchen banalitäten aufhalte, aber irgendwie hilf mir das hier alles nicht so recht weiter... deshalb meine dumme frage:

ich habe 4 felder, welche mit zahlen gefüllt sind. diese zahlen will ich in normale integer variable umwandeln um sie dann einfach verrechnen zu können. das mache ich ganz einfach über:

Delphi-Quellcode:
a:=StrToInt(LabeledEdit1.Text);
so auch mit den anderen 3 feldern. wenn ich nun wie folgt rechnen will, kriege ich immer eine fehlermeldung:

Delphi-Quellcode:
vorgabe:=(d * (c div 133) - b + a);
wo ist der fehler in dieser eigentlich doch sehr einfachen rechenprozedur?! HELP DIESES DELPHI WILL NET WIE ICH WILL :X

danke im voraus

Phoenix 5. Nov 2007 11:31

Re: problem bei simpler rechenfunktion...
 
Zitat:

Zitat von arest
wenn ich nun wie folgt rechnen will, kriege ich immer eine fehlermeldung

Welche denn?

mkinzler 5. Nov 2007 11:31

Re: problem bei simpler rechenfunktion...
 
Welche Fehlermeldung?

oldmax 5. Nov 2007 11:53

Re: problem bei simpler rechenfunktion...
 
Hi
Delphi wird nie wollen, wie du willst, sondern sich strikt an Regeln halten. Solange du dies auch tust, ist delphi dein Freund und Helfer, wenn nicht, es gibt nix stureres wie eine Programmiersprache. Trifft auch auf Programme aller Art zu.
Vermutlich, da du so schön Klammern gesetzt hast, fehlt das Schlüsselwort Trunc vor der Klammer, wenn Vorgabe eine Integer-Variable ist.....
Gruß oldmax

divBy0 5. Nov 2007 12:11

Re: problem bei simpler rechenfunktion...
 
Versuchs mal so:

Delphi-Quellcode:
vorgabe:=trunc(d * (c div 133) - b + a);
oder so:

Delphi-Quellcode:
vorgabe:=round(d * (c div 133) - b + a);

DeddyH 5. Nov 2007 12:14

Re: problem bei simpler rechenfunktion...
 
Div ist doch bereits ganzzahlige Division, oder ist da etwas an mir vorbeigegangen? :gruebel:

Klaus01 5. Nov 2007 12:29

Re: problem bei simpler rechenfunktion...
 
Ich denke, ohne die entsprechende Fehlermeldung macht es wenig Sinn
hier noch weiter zu raten.

Grüße
Klaus

Kedariodakon 5. Nov 2007 12:29

Re: problem bei simpler rechenfunktion...
 
Eigentlich ist der Code soweit IO, dass einzigste was sein kann, ist dass c 0 ist...
oder eine der Berechnungen den Zahlenbereich eines Integers verletzt...

Ohne fehlermeldung stochern wir aber nur in einem schwarzen Loch...
Ev konnte Int64 helfen...

Bye Christian

RavenIV 5. Nov 2007 12:33

Re: problem bei simpler rechenfunktion...
 
Zitat:

Zitat von Kedariodakon
Ohne fehlermeldung stochern wir aber nur in einem schwarzen Loch...

[offtopic]
Da must Du aber einen gaaaaanz schön langen Stock haben.
Ausserdem musst Du den Stock seeeeehr gut festhalten.
:-)

divBy0 5. Nov 2007 12:38

Re: problem bei simpler rechenfunktion...
 
Aber wenn c = 0 ist, dann wäre das Ergebnis der Division 0. Das dürfte aber keinen Fehler auslösen.

Eigentlich kann nur die genaue Fehlermeldung / Fehlerbeschreibung weiterhelfen.

Kedariodakon 5. Nov 2007 12:41

Re: problem bei simpler rechenfunktion...
 
Zitat:

Zitat von divBy0
Aber wenn c = 0 ist, dann wäre das Ergebnis der Division 0. Das dürfte aber keinen Fehler auslösen.

Eigentlich kann nur die genaue Fehlermeldung / Fehlerbeschreibung weiterhelfen.

Ok Verlesen hast recht, er teilt ja durch 133... Mein Fehler...

Nunja ohne Fehlermeldung stochern wir trotzdem in Gemüsebeet

Bye Christian

arest 5. Nov 2007 21:54

Re: problem bei simpler rechenfunktion...
 
ahso, ja klar, sorry für den fehler meinerseits... der fehler ist kein fehler direkt im code sondern ein runtime error... er lautet wie folgt:

"Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: "" ist kein gültiger Integerwert'. Prozeß wurde angehalten. Mit einzelnen Anweisungen oder Start folgen."

das mit trunc hat nix dran geändert... ich poste euch hier mal kurz den code, den ich komplett habe... er ist umstädnlich aber ich dachte, der fehler könnte durch zu viele klammern und all den kram kommen! so far

Delphi-Quellcode:
e
lse begin
           //spielvorgabe:=(StrToInt(LabeledEdit4.Text*(StrToInt(LabeledEdit3.Text) div 131)- StrToInt(LabeledEdit2.Text)+StrToInt(LabeledEdit1.Text);
           a:=StrToInt(lauf.Daten.platzpar);
           b:=StrToInt(LabeledEdit2.Text);
           c:=StrToInt(LabeledEdit3.Text);
           d:=StrToInt(LabeledEdit4.Text);
           x:=trunc(c div 133);
           y:=trunc(d * x);
           z:=trunc(y - b);
           spielvorgabe:=trunc(z + a);
           Memo1.Lines.Text:=('Spielvorgabe:'+#13+'( HCP x (Slope / 133) - CR + Par )'+#13+#13+IntToStr(spielvorgabe));
        end;
der rest des codes is unwichtig, thanx

Kedariodakon 5. Nov 2007 21:58

Re: problem bei simpler rechenfunktion...
 
Die Lösung liegt doch auf der Hand, eins der Umwandlungen
Delphi-Quellcode:
a := StrToInt( lauf.Daten.platzpar );
b := StrToInt( LabeledEdit2.Text );
c := StrToInt( LabeledEdit3.Text );
d := StrToInt( LabeledEdit4.Text );
geht schief, da eines der Strings nix enthält und nix ist kein Integer ;)

Einfach mal Haltepunkte setzen und schauen...


spontan tip ih mal auf: lauf.Daten.platzpar...

Bye Christian

grenzgaenger 5. Nov 2007 22:00

Re: problem bei simpler rechenfunktion...
 
ganz einfach, erst mal prüfen ob etwas im string eingegeben wurde und dann prüfen ob es sich um eine gültige zahl handelt (VAL). erst wenn beides in ordnung ist, kannste dann rechnen... <HTH>

oldmax 6. Nov 2007 05:23

Re: problem bei simpler rechenfunktion...
 
Hi
Ganz genau... Im Editfeld steht kein Zahlenwert. Vermutlich hast du die Vorbesetzung der Eigenschaft Text im Objektinspektor (fast immer der Name des Editfeldes) nicht mit 0 überschrieben und deine Berechnung wird in irgendeinem Ereignis aufgerufen, oder du rufst die Berechnung in Create der Form auf.
Edit Vergeßt diesen Beitrag. Die Fehlermeldung deutet auf einen leeren String.
Gruß oldmax

mkinzler 6. Nov 2007 05:47

Re: problem bei simpler rechenfunktion...
 
-Nimm TryStrToInt() oder Val() statt StrToInt()
-überprüfe vorher auf Richtigkeit, der Eingabe
-nimm nen MaskEdit, ...

arest 6. Nov 2007 16:56

Re: problem bei simpler rechenfunktion...
 
also danke erstmal an eure vielen ratschläge, aber leider haben sie mir nicht weitergeholfen... ich habe es spaßeshalber mal extern meines bisherigen programms (komplett neue alles..) ausprobiert! ich wandle lediglich die eingaben aus den 4 feldern in integerwerte um, dann verrechne ich sie wie angegeben und will dies als eine integer variable gespeichert kriegen. dann hab ich euren tipp mit round(..) angewandt, da ansonsten logischerweise nix richtiges zustandekommen kann... aber auch dabei ist nix richtiges rausgekommen! als ergebnis speichert er mir immer eine 1 ab, was allerdings absolut nicht hinkommt! ich werde euch nun einmal ein beispiel geben:

Feld1: 72
Feld2: 69
Feld3: 121
Feld4: 28

diese 4 werde sind in den feldern und werden korrekt in integer umgewandelt. jetzt sollen die werte wie folgt verrechnet werden:

(Feld4 * (Feld3 div 133)) - Feld2 + Feld1

die klammern sind nur dazu da, um jegliche fehlerquellen auszuschließen! trotzdem dass ich es eigentlich richtig geklammert habe und alles, kriege ich kein richtiges ergebnis raus! KOTZ :X meine bitte daher:

wie löst ihr dieses problem?! und wenn eure lösung eine komplett andere ist, als mein herangehen, dann bin ich auch glücklich, solange es funktioniert!! HELP PLS

mkinzler 6. Nov 2007 17:02

Re: problem bei simpler rechenfunktion...
 
Was kommt raus und welches Ergebnis erwartest du?

arest 6. Nov 2007 17:05

Re: problem bei simpler rechenfunktion...
 
wie ich oben geschrieben habe, spuckt er mir als ergebnis eine 1 aus... wenn man nach meinen angaben rechnen würde, müsste eigentlich 28,4736...rauskommen, wegen round funktion dann halt nur noch 28! aber nix dergleichen findet da statt

mkinzler 6. Nov 2007 17:11

Re: problem bei simpler rechenfunktion...
 
Du weisst aber das 121 DIV 133 0 ergibt?

arest 6. Nov 2007 17:12

Re: problem bei simpler rechenfunktion...
 
das ergibt nach normalem rechenverständnis 0.9097744 usw.

mkinzler 6. Nov 2007 17:16

Re: problem bei simpler rechenfunktion...
 
DIV ist aber eine Ganzzahlendivisison und diese ergibt 0 und einer Rest von 121 (121 MOD 133)

DeddyH 6. Nov 2007 17:17

Re: problem bei simpler rechenfunktion...
 
Also statt integer double benutzen und entsprechend casten.

Progman 6. Nov 2007 17:18

Re: problem bei simpler rechenfunktion...
 
DIV macht eine GANZZAHLDIVISION. Da kann nie 0.9.... rauskommen ;)

..2 late... ;)

arest 6. Nov 2007 17:26

Re: problem bei simpler rechenfunktion...
 
okay, dann hab ich jetzt zumindest gerafft, wo mein fehler ist! kann mir einfach einer kurz nen winzigen code schreiben, wo dat gerechnet wird?! sprich was muss ich schreiben? StrToDouble(..) oder wat.. sry bin halt absoluter neuling :( und wenn das dann in variable ist, wie rechne ich?

mkinzler 6. Nov 2007 17:28

Re: problem bei simpler rechenfunktion...
 
StrToFloat oder besser TryStrToFloat

sirius 6. Nov 2007 17:29

Re: problem bei simpler rechenfunktion...
 
und anstatt div nimmst du dann ganz normal /

arest 6. Nov 2007 17:39

Re: problem bei simpler rechenfunktion...
 
herr im himmel, ich danke euch allen :)

eine frage noch, wenn ich meine zahl, die derzeitig nun bei irgendwas mit 10kommastellen runden will, wie kriege ich hin, dass er sie auf eine kommastelle rundet?!

DeddyH 6. Nov 2007 17:41

Re: problem bei simpler rechenfunktion...
 
Zur Ausgabe kannst Du Format benutzen.
Delphi-Quellcode:
ShowMessage(Format('%.1f',[Zahl]))

arest 6. Nov 2007 17:45

Re: problem bei simpler rechenfunktion...
 
super! alles läuft wie geschmiert! danke euch allen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz