Probleem met berekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dyan van der Nat

Dyan van der Nat

05/07/2013 13:47:23
Quote Anchor link
Hallo,

Ik heb een probleem met een berekening:
---------------------------------------
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
<?php
$num1
= 0.00;
$num2 = 50.86;
$num3 = 1335.56;
$num4 = 60.72;
$total = 1447.14;

$total_new = $num1 + $num2 + $num3 + $num4;
$diff = $total - $total_new;

echo $total_new.'<br>';
echo $total.'<br>';
echo $diff.'<br>';
?>


De uitkomst hiervan is:
---------------------------------------
1447.14
1447.14
2.27373675443E-13

Ik heb deze berekening ook in Applescript, Delphi/Pascal, VBScript en PHP geprobeerd, allemaal met dezelfde uitkomst.
Kan iemand mij vertellen wat er niet goed gaat?

Groeten,
Dyan.
 
PHP hulp

PHP hulp

19/05/2024 16:29:07
 
Dimitri Van Reeth

Dimitri Van Reeth

05/07/2013 14:04:41
Quote Anchor link
PHP gebruikt floats ipv decimale types zoals bij bijvoorbeeld MYSQL, waardoor je inaccurate uitkomsten kan krijgen.
Dit kan je dan oplossen door number_format te gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $diff = number_format($total - $total_new,2, '.', ''); ?>
Gewijzigd op 05/07/2013 14:05:00 door Dimitri Van Reeth
 
Erwin H

Erwin H

05/07/2013 14:09:04
Quote Anchor link
Dat heeft te maken met de machineprecisie. Je werkt met niet gehele getallen die intern in een computer in bits worden opgeslagen. Niet gehele getallen kunnen niet helemaal precies worden gevormd, waardoor je altijd een kleine afwijking gaat krijgen. Hoe meer reken stappen je maakt, hoe groter de afwijking wordt. De afwijking in jouw geval is wat je ziet als je de twee getallen van elkaar aftrekt.

De hele theorie is nog wat complexer dan dit overigens.
Oplossing: ga nooit uit van een perfecte 0, die krijg je namelijk nooit, kijk altijd of het verschil voldoende klein is, zo ja, dan is het in feite nul. Wat voldoende klein is mag jezelf definieren, dat is namelijk ook niet altijd gelijk.
 
Dyan van der Nat

Dyan van der Nat

05/07/2013 14:28:44
Quote Anchor link
Hartlijk bedankt voor jullie reacties.
 



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.