Rekenen met PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Manfred vd waarsenburg

Manfred vd waarsenburg

22/01/2023 11:10:44
Quote Anchor link
goedendag,

ik merk dat rekenen binnen php niet het gewenste resultaat op levert.
uit onderstaande code komt niet wat ik zou verwachten
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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: €&nbsp" . $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 -
 
PHP hulp

PHP hulp

30/01/2023 02:25:39
 
Rob Doemaarwat

Rob Doemaarwat

22/01/2023 13:03:15
Quote Anchor link
1) Je kunt de som en het totaal ook in 1x ophalen: SELECT SUM(payment_amount),COUNT(*) FROM ...
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 ...
 
Manfred vd waarsenburg

Manfred vd waarsenburg

22/01/2023 13:14:31
Quote Anchor link
Thanks, voor het antwoord.
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
 
Adoptive Solution

Adoptive Solution

22/01/2023 13:38:01
 
Manfred vd waarsenburg

Manfred vd waarsenburg

22/01/2023 13:53:39
Quote Anchor link
Thanks, ik heb het inmiddels aangepast
 
Ad Fundum

Ad Fundum

23/01/2023 10:30:24
Quote Anchor link
Je kan ipv PHP ook in de database een nummer in de eigen locale zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT
  FORMAT(SUM(payment_amount), 2, 'nl_NL') AS total
...

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.