Rekenen met PHP
ik merk dat rekenen binnen php niet het gewenste resultaat op levert.
uit onderstaande code komt niet wat ik zou verwachten
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php $sql = "SELECT SUM(payment_amount) FROM josvg_eb_registrants WHERE published = '1' and event_id = '1' ";
$result = mysqli_query($mysqli, $sql);
while($row = mysqli_fetch_assoc($result))
{
$nb = $row['SUM(payment_amount)'];
$number = number_format($nb, 2);
echo "Totaal betaald: € " . $number;
}
$sql2 = "SELECT COUNT(*) FROM josvg_eb_registrants WHERE published = '1' and event_id = '1' ";
$result2=mysqli_query($mysqli,$sql2);
$row2=mysqli_fetch_array($result2);
{
$ab = $row2['COUNT(*)'];
$gb = $number / $ab;
echo "</br> Gemiddelde besteding : $gb" ;
}
/* free result set */
$result->free();
$result2->free();
/* close connection */
$mysqli->close();
?>
$result = mysqli_query($mysqli, $sql);
while($row = mysqli_fetch_assoc($result))
{
$nb = $row['SUM(payment_amount)'];
$number = number_format($nb, 2);
echo "Totaal betaald: € " . $number;
}
$sql2 = "SELECT COUNT(*) FROM josvg_eb_registrants WHERE published = '1' and event_id = '1' ";
$result2=mysqli_query($mysqli,$sql2);
$row2=mysqli_fetch_array($result2);
{
$ab = $row2['COUNT(*)'];
$gb = $number / $ab;
echo "</br> Gemiddelde besteding : $gb" ;
}
/* free result set */
$result->free();
$result2->free();
/* close connection */
$mysqli->close();
?>
Resultaat $number = 8279
Resultaat $ab = 139
Resultaat $gb = 0.057773...........
terwijl je voor resultaat 59,5611..... zou verwachten.
wat doe ik hier niet goed ?
Gewijzigd op 22/01/2023 11:55:16 door - Ariën -
2) Gebruik aliassen, dat maakt het makkelijker om de waarde uit de array te halen: SELECT SUM(payment_amount) AS `sum`,COUNT(*) AS `count` FROM ... Nu is het gewoon $row['sum'] en $row['count']. Evt. kun je zelfs een extract($row) doen, en dan heb je $sum en $count direct als variabelen beschikbaar.
3) Je rekent met een geformatteerde waarde ($number = number_format(...). Die 8279 is dan geformatteerd als 8,279 (Amerikaanse notatie voor duizendtallen is komma). Alles na die komma snapt PHP niet als ie er mee moet rekenen, dus dat wordt dan 8. En 8 / 139 = 0,057553957. Reken je gemiddelde dus uit met de ongeformatteerde waarde $nb: $gb = $nb / $ab , dan klopt het wel.
4) Je kunt dit ook direct door de database laten doen: SELECT SUM(payment_amount) AS `sum`,COUNT(*) AS `count`,AVG(payment_amount) AS `average` FROM ...
nu krijg ik het wel werken met de juiste uitkomst.
Is er ook een manier om het om te zetten naar Europese notatie?
Gewijzigd op 22/01/2023 13:54:11 door Manfred vd waarsenburg
Thanks, ik heb het inmiddels aangepast
Zie ook https://www.mysqltutorial.org/mysql-format-function/
PHP maakt kan het dan niet altijd eenvoudig omzetten naar een nummer, dus dit is alleen handig als je al het rekenwerk door de database laat doen.