falsche Rechnung



  • tagchen,
    ich bin heute auf ein Problem gestoßen, dass falsch gerechnet wird. In der Rechnung soll die Anzahl der Striche eines Fortschrittsbalkens berechnet werden.
    Dazu teile ich die Länge des Balkens durch den Maxwert, multipliziere ihn mit dem aktuellen Wert und teile dann durch 2.75 aus designtechnischen Gründen. Das Ergebnis ist allerdings immer 0.

    float anzahl = ((this->w/this->max)*this->pos)/2.75;
    

    this->w = 100
    this->max = 4741
    this->pos = zwischen 0 und 4741

    Die allererste Rechnung (100/4741=0.02) ergibt allerdings immer 0, weswegen der Rest dann auch 0 bleibt. Kann mir jemand verraten wieso? Ich habe schon andere Datentypen ausprobiert, aber immer ist das Ergebnis 0...

    greetz KN4CK3R



  • Hmmm kann es sein das einge werte keine fließkommazahlen sind ?

    Lösung:

    float anzahl = ((static_cast<float>(this->w)/static_cast<float>(this->max))static_cast<float>(*this->pos))/2.75;
    


  • DataByte schrieb:

    Hmmm kann es sein das einge werte keine fließkommazahlen sind ?

    Lösung:

    float anzahl = ((static_cast<float>(this->w)/static_cast<float>(this->max))static_cast<float>(*this->pos))/2.75;
    

    ja, bis auf die 2.75 sind alles ganze Zahlen. Aber hätte er bei der Rechnung nicht automatisch alles als Gleitkommazahl behandeln sollen?

    greetz KN4CK3R



  • Wenn 'this->w' und 'this->max' ganzzahlige Typen sind, wird dort die Ganzzahldivision ausgeführt. Bei 100/4741 ist das 0 😉 . Und 0*irgwas/irgwas ist nun mal auch 0^^.


  • Mod

    Wäre ein Wert des inneren Ausdrucks ein float gewesen, hätte der Compiler alles mit float gerechnet.
    Der Compiler betrachtet jeden Ausdruck einzeln.
    Allso hätte ein einizigercast genügt:

    float anzahl = ((static_cast<float>(this->w)/this->max)*this->pos)/2.75;
    

    BTW: Warum verwendest Du this->?



  • weil die Rechnung bei mehreren Objekten ausgeführt wird und "this->" kürzer ist, als "langerObjektname[index]->"
    thx 4 help, funktioniert jetzt alles.

    greetz KN4CK3R



  • häh


  • Mod

    KN4CK3R schrieb:

    und "this->" kürzer ist, als "langerObjektname[index]->"

    Dan lass doch this-> einfach weg! Das ist dann noch kürzer. this-> ist immer überflüssig!



  • rofler schrieb:

    häh

    würde es dir etwas ausmachen, dir ein anderes Forum zu suchen, um dort die Leute mit deinen qualifizierten Beiträgen zu beklücken?

    @this->: irgendwie ne ältere Angewohnheit... 🙄

    greetz KN4CK3R



  • KN4CK3R schrieb:

    rofler schrieb:

    häh

    würde es dir etwas ausmachen, dir ein anderes Forum zu suchen, um dort die Leute mit deinen qualifizierten Beiträgen zu beklücken?

    @this->: irgendwie ne ältere Angewohnheit... 🙄

    greetz KN4CK3R

    Ich hab dich lediglich auf das gleiche hingewiesen wie Martin. Dein this-> ist völlig unnötig und du hast den Sinn davon obendrein offensichtlich noch nicht richtig verstanden, deiner früheren Antwort nach zu urteilen.



  • jop, klar, mit "häh"... 🙄

    greetz KN4CK3R


Log in to reply