Entwickler-Ecke

Sonstiges (Delphi) - in Prozent berechnen, aber wie ?


mimi - Di 24.06.03 20:02
Titel: in Prozent berechnen, aber wie ?
Hallo,

ich habe Drei variabeln:

Schuss = (z.b) 40
Treffer = 30
Nicht treffer = 10

und nun möchte ich gerne ein die schuss genauikkeit ausrechnen und in prozent anzeigen. wie geht das ?


Tweafis - Di 24.06.03 20:04

Prozentanteil von a an b ist

(a/b)*100

oder als function:


Delphi-Quelltext
1:
2:
3:
4:
function prozent(a,b: Double): Double;
begin
  result := (a/b)*100;
end;


Die Klammern sind eigentlich unnötig, aber zum besseren verständnis durchaus angebracht.[/delphi]


Tweafis - Di 24.06.03 20:11

Geht auch so:

Prozentsatz a an b


Delphi-Quelltext
1:
Muldiv(a,100,b)                    


mimi - Di 24.06.03 20:13

ich habe sie so angewendet:

Delphi-Quelltext
1:
  Label18.Caption:=IntToStr(Round(prozent(Treffe,keine_treffer) ));                    

und es kommen fehler auf, die zahl liegt nicht mehr zwischen 0 und 100.


Tweafis - Di 24.06.03 20:16

???

(a/b)*100 ist garantiert richtig...

Debugge mal und seh dir die Werte von Treffer, keine_Treffer und dem ausgerechneten Prozentsatz an.


mimi - Di 24.06.03 20:18

ich lasse mir sie in labls alle anzeigen.
hier mal beispiel werte aus der anwendung(ohne %)
Schuss = 32
Treffer = 16
Keine Treffer = 16


Tweafis - Di 24.06.03 20:25

ja und das gibt falsche werte?

also

16 an 32 =
16/32 *100 =
0,5*100 =
50

Stimmt doch! du musst in das Treffer% label reinschreiben den Prozent(Treffer, Schüsse) und in KeineTreffer% Prozent(KeineTreffer, sChüsse)


mimi - Di 24.06.03 20:30

Zitat:

du musst in das Treffer% label reinschreiben den Prozent(Treffer, Schüsse) und in KeineTreffer% Prozent(KeineTreffer, sChüsse)

wie meinst du das ?


Tweafis - Di 24.06.03 20:36

Hmm, sagen wir

LTrefferProz ist das Label das die Treffer on Prozent anzeigt,
LKeineTrefferProz ist das Lable das die Nichttreffer in Prozent anzeigt,

Schuesse sind die Schüsse,
Treffer und KeineTreffer sind die jeweiligen Werte.


Delphi-Quelltext
1:
2:
LTrefferProz.Caption := IntToStr(MulDiv(Treffer,100,Schuesse));
LKeineTrefferProz.Caption := IntToStr(MulDiv(KeineTreffer,100,Schuesse));


Dann sind in den zwei labeln die jeweiligen Werte angezeigt. Wenn du genauer gehen willst, dann nimm die Funktion von oben (a/b*100) und FloatToStr.


mimi - Di 24.06.03 20:48

es scheint zu Klappen aber ich habe es jetzt so gemacht:

Delphi-Quelltext
1:
      Label18.Caption:=IntToStr(100-MulDiv(keine_treffer,100,schuss));;                    

und es sieht wirklich so aus als ob es funktionierten würde:)
muss es aber noch mehr testen ob es wirklich geht


Tweafis - Di 24.06.03 20:52

Wie gesagt, das MulDiv ist deswegen praktisch weil es gleich rundet. Wenn du es übersichtlich machen willst, dann


Delphi-Quelltext
1:
2:
3:
PrzTreffer := MulDiv(keine_Treffer,100,schuss);
Label17.Caption:=IntToStr(PrzTreffer);
Label18.Caption:=IntToStr(100-PrzTreffer);


Nehme einfach mal an Label17 ist die anzeige der getroffenen. Falls du die gar nicht brauchst dann kannst du es auch so machen wie du jetzt, aber ich würde meinen Quellcode übersichtlich gestalten. Außerdem ein Kommentar, sonst weißt du irgendwann nichtg mehr was zum Teufel MulDiv(keine_Treffer,100,schuss) bewirken soll ;)


mimi - Di 24.06.03 20:56

doch das weiß ich nacher noch, ohen es mit einem kometar zuweisen zu müssen:)
ich habe vor den labenl noch ein label mit der bezeichnus: Trefferqute
ob das richtig geschrieben ist das wort weiß ich jetzt nicht, aber egal:)
danke für deine schnelle hilfe


Tweafis - Di 24.06.03 21:00

>> doch das weiß ich nacher noch, ohen es mit einem kometar zuweisen zu müssen:)
>> ich habe vor den labenl noch ein label mit der bezeichnus: Trefferqute

Nagut, war ja nur ein Tip :mrgreen:

>> ob das richtig geschrieben ist das wort weiß ich jetzt nicht, aber egal:)
Trefferquote

>>danke für deine schnelle hilfe
Kein Problem, bin doch froh wenn ich irgendwo helfen kann :D


mimi - Di 24.06.03 22:05

mir sind noch einige fehler aufgefallen in der rechnung, nun mache ich es so:

Delphi-Quelltext
1:
  Label18.Caption:=IntToStr( Round(treffe / schuss* 100) );