probleem met berekeningen in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco Eilander

Marco Eilander

15/02/2022 01:10:24
Quote Anchor link
Hallo,

Ik weet niet of dit de goede plek is voor deze vraag, maar ik zit met dit probleem:
Ik heb een berekening, maar ik krijg zowel via de rekeningmachine op mijn telefoon als de uitkomst in PHP hetzelfde: 436.0768.

Het gaat om 0.0008 * 99^3 + 4 * 99 + 40.

Plak ik het in Google, dan komt er heel iets anders uit, 1212.2392, en dat moet ook aangegeven worden in PHP.
Ik zie dat Google () plaatst op de juiste plekken, maar als ik dit doe in PHP, dan klopt het nog steeds niet.

Dit heb ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$uitkomst = (0.0008 * (99^3)) + (4 * 99) + 40;


Iemand enig idee wat er fout gaat, en hoe ik dit kan oplossen?

Alvast bedankt.
 
PHP hulp

PHP hulp

30/09/2022 20:40:11
 
- Ariën  -
Beheerder

- Ariën -

15/02/2022 01:12:54
Quote Anchor link
En wat nu als je de losse sommen tussen de haakjes apart berekent, en de uitkomst in een variabele opslaat?
 
Jan R

Jan R

15/02/2022 06:10:02
Quote Anchor link
Je gewone rekenmachine houd geen rekening met de wiskundige volgorde regels php blijkbaar wel en google zeker

1 haakkjes van binnen naar buiten
2 machten en worteltrekkingen
3 vermenigvuldigen en delen
4 optellen en aftrekken
 
Marco Eilander

Marco Eilander

15/02/2022 09:11:03
Quote Anchor link
- Ariën - op 15/02/2022 01:12:54:
En wat nu als je de losse sommen tussen de haakjes apart berekent, en de uitkomst in een variabele opslaat?


Kom ik op hetzelfde uit.

Toevoeging op 15/02/2022 09:11:31:

Jan R op 15/02/2022 06:10:02:
Je gewone rekenmachine houd geen rekening met de wiskundige volgorde regels php blijkbaar wel en google zeker

1 haakkjes van binnen naar buiten
2 machten en worteltrekkingen
3 vermenigvuldigen en delen
4 optellen en aftrekken


Mijn PHP blijkbaar niet, want het werkt niet.
 
Ad Fundum

Ad Fundum

15/02/2022 09:22:55
Quote Anchor link
De operator ^ is geen wiskundige operator in PHP, maar een booleaanse: https://www.php.net/manual/en/language.operators.bitwise.php
In PHP geeft 99 ^ 3 als resultaat 96.

Het probleem zit hem in dat je iets aan hebt genomen zonder te controleren. (Komt vaker voor met PHP..)
Je kunt de oplossing vinden door het probleem in kleinere stukken te breken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
print '  (0.0008 * (99^3)) + (4 * 99) + 40' . PHP_EOL;
print '= (0.0008 * ' . (99^3) . ') + ' . 4 * 99 . ' + 40' . PHP_EOL;
print '= ' . (0.0008 * (99^3)) . ' + ' . (4 * 99) + 40 . PHP_EOL;
print '= ' . (0.0008 * (99^3)) + (4 * 99) + 40;
?>

Uitvoer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
  (0.0008 * (99^3)) + (4 * 99) + 40
= (0.0008 * 96) + 396 + 40
= 0.0768 + 436
= 436.0768

Vermoedelijk probeer je 99 tot de macht 3 uit te rekenen in PHP. Dat gaat zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
print 99 ** 3;
?>

Resultaat: 970299
Gewijzigd op 15/02/2022 09:28:10 door Ad Fundum
 
Jan R

Jan R

15/02/2022 10:11:43
Quote Anchor link
Ad Fundum op 15/02/2022 09:22:55:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
print 99 ** 3;
?>

Resultaat: 970299


Wist ik ook niet :). Ik ging ook uit van machten met ^
 
Ad Fundum

Ad Fundum

15/02/2022 10:31:33
Quote Anchor link
Zo ging ik er heel lang van uit dat and en && hetzelfde waren.
Ik trok een analogie met andere systemen zoals z/OS, waar je and moest typen omdat ze geen toetsenbord hadden met een ampersand.

Maar helaas, ik zat er naast. En dit stond toevallig wel gewoon in de handleiding van PHP.
De les: bij formele systemen zoals een programmeertaal moet je de handleiding gelezen kennen om te weten wat je aan het doen bent. Anders maak je allerlei fouten waar je geen erg in hebt.

Bij PHP zitten er relatief veel hiaten in de officiële documentatie. Het kan dan ook geen kwaad om een keer een goed boek te lezen dat alles van A tot Z behandeld. Een aanrader is het Kookboek PHP van Ward van der Put (https://www.bol.com/nl/nl/p/php-kookboek-hb/1001004006192040/)

En het kan geen kwaad om kennis te hebben van C, wat achter PHP zit. Dan begrijp je ineens een stuk beter waarom PHP in elkaar zit zoals het in elkaar zit, en wat de voor- en nadelen van die aanpak zijn.
Gewijzigd op 15/02/2022 10:32:12 door Ad Fundum
 
Ward van der Put
Moderator

Ward van der Put

16/02/2022 12:12:18
Quote Anchor link
Dank voor de boekentip. :-)

Dit voorbeeld laat ook zien waarom test-driven development (TDD) en unittests in PHP nuttig zijn.
 



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.