DiamondDog: Problem mit Prozentrechnung

Hallo Leute,
ich hab ein kleines Problem mit meiner Prozentrechung und zwar können User abstimmen, ob etwas gut oder schlecht ist.
Das Problem liegt nachher bei der Auswertung und Anzeige. Haben zB. 15 User für gut gestimmt und 0 für schelcht, errechnet sich komischerweise dann ein Prozentwert von:

Gut 90 %
Schlecht 0%

Normal müsten es ja 100% gut sein und 0% schlecht.

Hier mal mein Script:

  
  if($row['votes_user'] > 0){  
	$prozent_good = bcdiv('100',$row['votes_user']);  
	$prozent_good = round(bcmul($prozent_good,$row['votes_good']));  
	  
	$prozent_bad = bcdiv('100',$row['votes_user']);  
	$prozent_bad = round(bcmul($prozent_bad,$row['votes_bad']));  
  }else{	  
	$prozent_good = 0;  
	$prozent_bad = 0;	  
  }  

Hoffe das ihr mir da vll weiterhelfen könnt. Danke schon mal an alle.

Mfg

  1. Hallo DiamondDog,

    ich verstehe deinen PHP-Code nicht, daher nur die Basics:

    alle = anzahl_gut + anzahl_schlecht

    prozent_gut      = 100 * anzahl_gut      / alle
    prozent_schlecht = 100 * anzahl_schlecht / alle

    Die Ergebnisse dann noch nach Bedarf runden.

    siehe auch Wikipedia: Prozentrechnung

    Gruß, Jürgen

    1. Hallo DiamondDog,

      ich verstehe deinen PHP-Code nicht, daher nur die Basics:

      Hallo Jürgen,
      zur Erklärung:

        
        if($row['votes_user'] > 0){  
              $prozent_good = bcdiv('100',$row['votes_user']);  
              $prozent_good = round(bcmul($prozent_good,$row['votes_good']));  
        
              $prozent_bad = bcdiv('100',$row['votes_user']);  
              $prozent_bad = round(bcmul($prozent_bad,$row['votes_bad']));  
        }else{  
              $prozent_good = 0;  
              $prozent_bad = 0;  
        }  
      
      

      Alle = $row['votes_user']
      Gutestimmen = $row['votes_good']
      Schlechtestimmen = $row['votes_bad']

      Die Rechnung ist:
      Ergebniss = 100 / Alle
      Ausgabe = Ergebniss * Gutestimmen

      So rechnet der PHP Code oben, und wenn ich dich richtig verstehe, dann müste es so sein:

        
      $prozent_good = bcdiv($row['votes_good'],bcmul(100,$row['votes_user']));  
      
      

      Oder bin ich gerade etwas durcheinander?

      Mfg

      1. Hallo DiamondDog,

        dann hilft nur debuggen: alle Werte und Zwischenergebnisse anzeigen.

        Gruß, Jürgen

    2. prozent_gut      = 100 * anzahl_gut      / alle
      prozent_schlecht = 100 * anzahl_schlecht / alle

      Die Ergebnisse dann noch nach Bedarf runden.

      Und dabei auch schauen dass immer 100% rauskommen.
      Je nach Rundung könnte die Summe nicht mehr passen, das sieht dann recht seltsam aus wenn jemand mitrechnet.

      1. Hallo Encoder,

        Die Ergebnisse dann noch nach Bedarf runden.
        Und dabei auch schauen dass immer 100% rauskommen.
        Je nach Rundung könnte die Summe nicht mehr passen, das sieht dann recht seltsam aus wenn jemand mitrechnet.

        also politisch runden.

        Gruß, Jürgen

        1. Hallo,

          Je nach Rundung könnte die Summe nicht mehr passen, das sieht dann recht seltsam aus wenn jemand mitrechnet.
          also politisch runden.

          also zum Beispiel 62.6% Ja, 36.7% Nein, 0.7% Sonstige. ;-)

          Ciao,
           Martin

          --
          The other line moves faster. (from Murphy's Law)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Moin,

    ich hab ein kleines Problem mit meiner Prozentrechung

    ich habe vor allem den Eindruck, die machst die Rechnung wahnsinnig kompliziert. Deine User können also mit "gut" oder "schlecht" stimmen?

    Dann ist der Anteil "gut" = (Anzahl der Gut-Stimmen) / (Anzahl der Stimmen gesamt)

    Entsprechend mit den Schlecht-Stimmen - wobei die alternativ als (1 - Anteil "gut") zu errechnen wären, sofern es keine Enthaltungen gibt.

    $prozent_good = bcdiv('100',$row['votes_user']);
    $prozent_good = round(bcmul($prozent_good,$row['votes_good']));

    Warum verwendest du überhaupt bcmul() und bcdiv() anstatt herkömmlicher Multiplikation und Division?

    So long,
     Martin

    --
    Wenn der Computer wirklich alles kann,
    dann kann er mich mal kreuzweise.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Deine User können also mit "gut" oder "schlecht" stimmen?

      richtig nur gut oder schlecht.

      Dann ist der Anteil "gut" = (Anzahl der Gut-Stimmen) / (Anzahl der Stimmen gesamt)

      Das wäre bei 15 Stimmen und 15 mal gut, ja dann = 0 oder nicht?

      Entsprechend mit den Schlecht-Stimmen - wobei die alternativ als (1 - Anteil "gut") zu errechnen wären, sofern es keine Enthaltungen gibt.

      Nein Enthaltungen gibt es nicht.

      Warum verwendest du überhaupt bcmul() und bcdiv() anstatt herkömmlicher Multiplikation und Division?

      Wieso nicht? Macht doch keinen Unterschied oder?

      Mfg Dog

      1. Hallo,

        Dann ist der Anteil "gut" = (Anzahl der Gut-Stimmen) / (Anzahl der Stimmen gesamt)
        Das wäre bei 15 Stimmen und 15 mal gut, ja dann = 0 oder nicht?

        nein, das wäre ja seltsam.
          15 / 15 = 1 = 100%

        Warum verwendest du überhaupt bcmul() und bcdiv() anstatt herkömmlicher Multiplikation und Division?
        Wieso nicht? Macht doch keinen Unterschied oder?

        Naja, es macht die Sache komplizierter und unübersichtlicher. Gerade zum Nachvollziehen ...

        Ciao,
         Martin

        --
        Er war ein Mann wie ein Baum. Sie nannten ihn Bonsai.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Naja, es macht die Sache komplizierter und unübersichtlicher. Gerade zum Nachvollziehen ...

          Stimmt deswegen im Theard weiter unten vereinfacht und funktionel.

      2. Hi!

        Warum verwendest du überhaupt bcmul() und bcdiv() anstatt herkömmlicher Multiplikation und Division?
        Wieso nicht? Macht doch keinen Unterschied oder?

        Nein? Es ist ungefähr so ein Unterschied wie zwischen einer Rechnung auf Papier und einer mit einem Taschenrechner. Zudem wirst du den Unterschied und des Rätsels Lösung sehen, wenn du dir das Ergebnis des ersten Rechenschrittes anschaust:

        $prozent_good = bcdiv('100',$row['votes_user']);

        also

        var_dump(bcdiv('100','15');

        mit

        var_dump(100/15);

        vergleichst.

        Lo!