• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Durchschnitt errechnen

Status
Für weitere Antworten geschlossen.
O

ohrflieger

Guest
Hallo,

hab eine Frage:
Für eine Bewertung von Medien möchte ich den Durchschnitt der abgegebenen Bewertungen ausrechnen.

Zunächst wird die Bewertung (von 1-5) in einer Datenbank gespeichert. Dann lese ich die Werte auf der Seite, auf der ich das Ergebnis anzeigen will, aus, teile dann die gesamtsumme durch die Anzahl der bewertungen und bekomme dann meistens eine Kommazahl.
Nun weiß ich nich wie man in PHP mit Kommazahlen umgeht. Wird die Kommazahl sofort als Kommazahl erkannt?

Dann möchte ich diese Kommazahl auf- bzw. abrunden auf die nächste Zahl (0.5, 1, 1.5, 2, 2.5, 3 usw. bis 5). Wie stelle ich das an?

bedanke ich jetzt schon auf hilfe!
 
PHP erkennt die Kommazahl, die Variable hat dann nur den Typ Double/ Float statt Integer. Abrunden kannst du mittels [phpnet]round[/phpnet].
 
Ich würde alle Noten in ein Array einlesen. Am besten in einer while-Schleife und implode() danach die Gesamtzahl mit count() errechnen, in eíner for-Schleife alle Zahlen zusammenrechnen und danach teilen ^^
 
ja oder einfach so:
PHP:
$array = Array(1,2,3,4,5,6,7,8,9);
$i = 0;
$l = 0;
foreach ($array as $note)
{
    $i += $note;
    $j++;
}

echo $i/$j;
 
ja oder einfach so:
PHP:
$array = Array(1,2,3,4,5,6,7,8,9);
$i = 0;
$l = 0;
foreach ($array as $note)
{
    $i += $note;
    $j++;
}

echo $i/$j;
ja, oder einfach mal den thread lesen (@NetzSchleicher & Frank) und nicht immer so ein müll posten. Er fragt doch garnich wie man den Durchschnitt berechnet, sondern wie man rundet (was Commodore ja schon richtig beantwortet hat).
Das ihr dann immer eure unterdurchnittlichen scripts posten müsst ist echt schlimm.

Da ich den code da jetzt nicht so stehen lassen will, muss ich dazu auch noch was sagen: Schonmal ins manual geschaut, da gibts die funktion, die nennt sich array_sum(), was die wohl macht?
also einfacher wäre das ganze so:
PHP:
print round(array_sum($array)/count($array));
 
Man könnte aber auch die Datenbank das Ergebnis errechnen lassen. Ist wohl auch sicher die performantere Variante ;)
 
@blax
Dann muss ich sagen dass der Thread Titel nicht den Vorgaben entspricht.

Aber genug der Sache, hast eindeutig Recht, und da ich nur den Thread überlesen habe und dann den von NEtzschleicher gelesen habe, hab ich da wohl´einen überflüssigen beitrag verfasst, der auchnoch nicht der Frage entsprach.

Sry
 
ich poste hier mal eine lösung... ob sie performance freundlich ist weiß miah doch net ^^

PHP:
<?php
// wenn die stelle hinter dem komma größer oder gleich 5 ist wird ,5 hinzugefügt. ansonsten steht da nur die zahl vor dem komma
$zahl = "1.6";

$zahl = round($zahl, 1);
$zahl = explode(".",$zahl);
echo $zahl[0];
if($zahl[1]>=5){
	echo ",5";
}
?>
 
Danke erstmal für die Hilfe :wink:

Eine Frage: Gibt PHP die Kommazahl als 1.3 oder 5.6 aus anstatt 5,6 und 1,3? Kommt ja aus dem Englischen.

Wie funktioniert die round()-Funktion?
 
also PHP gibt z.b. 5.6 aus und nicht 5,6 ^^ und round funktioniert so
PHP:
$zahl = "5.6548763131";

echo "Hier eine Zahl mit 2 kommastellen: ".round($zahl,2)."<br />\n";
echo "Hier eine Zahl mit 3 kommastellen: ".round($zahl,3)."<br />\n";
echo "Hier eine Zahl mit 4 kommastellen: ".round($zahl,4);
 
einfach number_format() benutzen, dann hat sich auch das mit dem runden erledigt.

ps: natürlich die Durchschnitts funktion AVG() der Datenbank benutzen - ich weiss nicht was diese idiotischen hilfen sollen oO
 
Ok, ich bin jetzt zu diesem Ergebnis gekommen:

PHP:
<?php
$abfrage = "SELECT * FROM Schneckendetektive WHERE Medie = 'schneck1'";
$result = mysql_query($abfrage) OR die(mysql_error());
if(mysql_num_rows($result)) {
$wert = 0;
while($row = mysql_fetch_assoc($result)) {
$wert = $wert + $row['Bewertung'];
}
$sgl = "SELECT COUNT(*) as Anzahl FROM Schneckendetektive WHERE Medie = 'schneck1'";
$sult = mysql_query($sgl) OR die(mysql_error());
$anza = mysql_fetch_assoc($sult);
$anz = $anz['Anzahl'];
$durchschnitt = $wert/$anz;
$durchschnitt = round($durchschnitt,1);
echo $durchschnitt;
} else {
?>
<nobr><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"></nobr>
<?php
}
?>

Allerdings hab ich ein Problem hiermit:

PHP:
$wert = 0;
while($row = mysql_fetch_assoc($result)) {
$wert = $wert + $row['Bewertung'];
}

Da sagt er mir einen Fehler weil ich die Zahl Null dividiert habe, also hat er die Bewertungden nicht zusammengezählt. Wie kann man das lösen? :?
 
der fehler müsste hier liegen:
PHP:
if(mysql_num_rows($result)) { 
$wert = 0; 
while($row = mysql_fetch_assoc($result)) { 
$wert = $wert + $row['Bewertung']; 
}
die funktion mysql_num_rows liefert dir nicht 'true' oder 'false' zurück sondern die Anzahl der Einträge.
In Folgedessen muss die If-Abfrage so aussehen:
PHP:
if(mysql_num_rows($result) != 0) { 
$wert = 0; 
while($row = mysql_fetch_assoc($result)) { 
$wert = $wert + $row['Bewertung']; 
}
 
Klappt nich

Hab den fehler gefunden.

richtig müsste es heißen:

PHP:
<?php
$abfrage = "SELECT * FROM Schneckendetektive WHERE Medie = 'schneck1'";
$result = mysql_query($abfrage) OR die(mysql_error());
if(mysql_num_rows($result)) {

while($row = mysql_fetch_assoc($result)) {
$wert = $wert + $row['Bewertung'];
}
$sgl = "SELECT COUNT(*) as Anzahl FROM Schneckendetektive WHERE Medie = 'schneck1'";
$sult = mysql_query($sgl) OR die(mysql_error());
$anza = mysql_fetch_assoc($sult);
$anz = $anz['Anzahl'];
if($anz != 0) { $durchschnitt = $wert/$anz; } else { $durchschnitt = $wert; }
$durchschnitt = round($durchschnitt,1);
echo $durchschnitt;
} else {
?>
<nobr><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"></nobr>
<?php
}
?>


Der Unterschied liegt hier:

PHP:
if($anz != 0) { $durchschnitt = $wert/$anz; } else { $durchschnitt = $wert; }

Der Fehler war "Divising by Zero", also "Dividieren durch Null". :)
 
Zuletzt bearbeitet von einem Moderator:
Klappt doch nicht :(

Ich versteh das nicht. bei mehreren Datensätzen in der Datenbank macht das Script nix.

PHP:
<?php
$abfrage = "SELECT * FROM Schneckendetektive WHERE Medie = 'schneck1'";
$result = mysql_query($abfrage) OR die(mysql_error());
if(mysql_num_rows($result)) {

while($row = mysql_fetch_assoc($result)) {
$wert = $wert + $row['Bewertung'];
}
$sgl = "SELECT COUNT(*) as Anzahl FROM Schneckendetektive WHERE Medie = 'schneck1'";
$sult = mysql_query($sgl) OR die(mysql_error());
$anza = mysql_fetch_assoc($sult);
$anz = $anz['Anzahl'];
if($anz != 0) { $durchschnitt = $wert/$anz; } else { $durchschnitt = $wert; }
$durchschnitt = round($durchschnitt,1);

$durchschnitt = explode(".",$durchschnitt);
$schnitt = $durchschnitt[0];
if($durchschnitt[1]>=5){
$schnitt .= ".5";
}
?>
<nobr>
<?php

if($schnitt == "0.5") { echo'<img src="../Bild/a_star2.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "1") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "1.5") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star2.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "2") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "2.5") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star2.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "3") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "3.5") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star2.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "4") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "4.5") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star2.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
if($schnitt == "5") { echo'<img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star1.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14">'; }
echo "</nobr>";

} else {
?>
<nobr><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"><img src="../Bild/a_star.jpg" alt="" border="0" hspace="0" vspace="0" width="14" height="14"></nobr>
<?php
}
?>
 
hier ist ein fehler:

$anz = $anz['Anzahl'];

es müsste so lauten

$anz = $anza['Anzahl'];


schreib ein error_reporting(E_ALL) an den anfang des scriptes dann weisst du sowas sofort
 
Ach und das wegen einem a :lol:
Mal wieder typisch für mich: Korrektes Script, aber Fehler in der Rechtschreibung :D

Danke für die Hilfe!
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben