Prozentzahl



  • int prozent = ((azaehler/anzahl_eintraege)*100);
    Form1 -> lb_prozent -> Caption = String(prozent);
    Application->ProcessMessages();
    

    Wobei ich zur laufzeit auch die variablen überprüft habe, welche aber stimmen.
    azaehler: zählt immer weiter hoch.
    anzahl_einträge: dort steht immer 3376 drin.

    dort müsste doch alles stimmen?
    trotzdem errechnet er immer 0.

    thx
    Bj



  • zusammen mit der schleife



  • @ junix.
    so funktioniert es.
    aber habe es übrigens auch schon mit float versucht, kommt aber aufs selbe raus. warum denn das? dort ist dein oben beschriebenes problem ja nicht.
    aber ist es nicht sp??:
    er rechnet die divison, die unter 0 ist, dann multipliziert mit 100, und was dort herauskommt schneidet er erst hinter dem komma ab?!?

    also warum funktioniert das alles nicht mit float?



  • aber habe es übrigens auch schon mit float versucht, [...] dort ist dein oben beschriebenes problem ja nicht.

    Irrtum. Der Cast nach Float passiert erst im Moment der Zuweisung zu einem Float. Solange du keine Floatzahlen in der Rechnung hast, ist ihm das ziemlich wurscht.

    -junix



  • aber was ich nicht verstehe ist:

    so funktioniert es:
    float prozent = (azaehler*100)/anzahl_eintraege;

    aber so nicht:
    *float prozent = (azaehler/anzahl_eintraege)100;

    obwohl das doch praktisch gesehen die selbe rechnung ist!!!???



  • ist es aber nicht. Jetzt kannst du mal selber so nachrechnen wies der Compiler macht, gemäss den mathematischen Regeln. Bei obiger Variante bekommst du nie eine Zahl < 1. Bei der unteren Variante ergibt der erste Term eine Zahl 0.X.

    Das Problem ist nun, dass der Compiler erst dann implizit castet, wenn er den ersten Kontakt mit einem anderen Typ (z.B. float) hat. In beiden Fällen passiert das in der Zuweisung.

    Um dem Vorzubeugen, hast du zwei möglichkeiten: Entweder du castest jeden Wert explizit nach float, oder du sorgst dafür, dass es nie ergebnisse < 1 ergibt.

    -junix



  • ok, vielen dank für die erklärungen!

    Bj


Anmelden zum Antworten