Nachkommateil bei Ganzzahldivision



  • Hallo,

    hab mal ne blöde Frage:

    Ich dividiere x durch y wobei x > y und y ungleich 0

    Wie ermittle ich nur den Nachkommateil dieser Division!
    Als Vorgabe ist eine einzige Anweisung erlaubt!

    Habs mit: x % y / y probiert aber das klappt so nicht (wg Rang des Operators oder so!)

    😕



  • dann setz doch KLammern 🙂

    (x % y) / y
    

    edit: wenn das beides ints sind musst du aber ne Konvertierung zu float oder double machen, ansonsten kommt immer 0 raus



  • also so

    int x = 4;
    int y = 5;
    double z =  (x % y) / (double)y;
    

    für C++ Puristen:

    int x = 4;
    int y = 5;
    double z =  (x % y) / static_cast<double>(y);
    


  • Pellaeon schrieb:

    (x % y) / y
    

    Das dürfte noch nicht so ganz klappen, da es immer noch Ganzzahl-Division verwendet 🙂

    @Rookie: Was genau willst du denn haben?

    • "x % y" - liefert den Rest der Division
    • "x / y" - liefert den ganzzahligen Anteil des Quotienten
    • "double(x%y)/y" - liefert den Nachkommaanteil des Quotienten
      (wichtig ist die Angabe, daß er mit Gleitkommazahlen (double) rechnen soll)
    • "(x%y)/y" - dürfte eigentlich generell 0 zurückgeben

    Edit: Da war Pellaeon schneller, seinen Fehler zu korrigieren 😉



  • CStoll schrieb:

    Pellaeon schrieb:

    (x % y) / y
    

    Das dürfte noch nicht so ganz klappen, da es immer noch Ganzzahl-Division verwendet 🙂

    Lies Edit und meinen Post darunter. 🙂
    Das klappt, habs auch gestestet

    edit: CStoll hat edit gemacht 😉



  • Pellaeon schrieb:

    also so

    int x = 4;
    int y = 5;
    double z =  (x % y) / (double)y;
    

    für C++ Puristen:

    int x = 4;
    int y = 5;
    double z =  (x % y) / static_cast<double>(y);
    

    nein. in c++ schreibt man
    int x = 4;
    int y = 5;
    double z = double(x % y) / y;



  • Wo is da der Unterschied, wenn man das double um den Zähler und nicht um den Nenner macht?



  • Vielen Dank für die schnelle Hilfe! 🙂

    Das klappt so!

    int x = 4;
    int y = 5;
    double z = (x % y) / (double)y;

    Hatte die Klammer (double) vergessen und dann liefert er immer Null!

    Übrigens braucht man x % y nicht in Klmmern setzen, funzt auch ohne!

    Gibts eigentlich eine ellegantere Lösung für die Ermittlung des Nachkommaanteils einer Ganzzahldivision? Einen Operator vielleicht,
    oder muss ich das immer so lösen?



  • Einen speziellen Operator dafür gibt es nicht, aber wenn du ganz clever sein willst, definierst du eine eigene Klasse myDouble, die diesen Operator bereitstellt 😃

    (oder du bleibst im ganzzahligen Bereich und verwendest den Divisionsrest x%y)


Anmelden zum Antworten