Beste,

Ik ben met PHP een soort systeempje aan het maken waardoor ik mijn gewerkte uren + ontvangen geld kan bijhouden.
Ik loop alleen op een foutje wat betreft het afronden, dit is mijn code:


<?php
$bruto_uurloon = 4.02;
$gewerkte_uren = 49.75;
$bruto_loon = $bruto_uurloon * $gewerkte_uren;
echo '<tr><td>Bruto loon:</td><td>'.$bruto_uurloon.' * '.$gewerkte_uren.' = </td><td>&euro;'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>

$bruto_loon zou volgens mijn rekenmachine 199.995, afgerond 200 dus, moeten zijn.
PHP zegt dat dit 199,99 is, wat doe ik verkeerd?

Mvg, Joost.
number_format($bruto_loon, 2, ', ', '.')

rond af op twee cijfers na de komma, dus PHP doet het goed. Gebruik liever de functie round().
je rond nergens af, number_format kapt af als ik het goed heb.

$bruto_loon = round($bruto_uurloon * $gewerkte_uren);
round($bruto_loon, 2) geeft precies hetzelfde resultaat.

Edit, dat van Mark werkte wel, thnx :)
PHP zegt helemaal niet dat het 199,99

PHP 5.2.13
<?php
$bruto_uurloon = 4.02;
$gewerkte_uren = 49.75;
$bruto_loon = $bruto_uurloon * $gewerkte_uren;
echo '<tr><td>Bruto loon:</td><td>'.$bruto_uurloon.' * '.$gewerkte_uren.' = </td><td>&euro;'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>


<tr><td>Bruto loon:</td><td>4.02 * 49.75 = </td><td>&euro;200,00</td></tr>


Met ander woorden, je doet niets fout

[Edit]
number_format behoort volgens de regels af te ronden
Bij mij geeft number_format(4.02 * 49.75, 2, ',', '') gewoon 200,00, dus tsja, weinig aan te zien.

Werk je toevallig op een 64-bits systeem? Dat geeft vaak dit soort problemen.
Joost van der Meijden op 31/05/2010 22:12:42

[quote="Noppes Homeland op 31/05/2010 22:09:43"]
PHP zegt helemaal niet dat het 199,99

<?php
$bruto_uurloon = 4.02;
$gewerkte_uren = 49.75;
$bruto_loon = $bruto_uurloon * $gewerkte_uren;
echo '<tr><td>Bruto loon:</td><td>'.$bruto_uurloon.' * '.$gewerkte_uren.' = </td><td>&euro;'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>


<tr><td>Bruto loon:</td><td>4.02 * 49.75 = </td><td>&euro;200,00</td></tr>



Met ander woorden, je doet niets fout


[edit]
number_format behoort volgens de regels af te ronden
[/edit]


Met jouw code krijg ik toch echt 199,99 als uitkomst hoor ...

[edit]
Kheb een iMac, en volgensmij is dat 64BIT ja, maar het werkt nu iig :)
[/edit]

[edit]
Het werkt toch niet helemaal zoals ik wil, nu rond hij het gewoon af naar een heel getal, ik wil gewoon dat als er meer dan 3 decimalen achter de komma staan, dat hij dat dan op 2 decimalen afrond.
Hoe kan ik dit dan het beste doen?

[/edit]
Het is niet mijn code, het is jouw code, copy pasta en run

Maar zie de opmerking van Richard.

[edit]
wat voor resultaat krijg je met sprintf of printf
Noppes Homeland op 31/05/2010 22:18:01

[edit]
wat voor resultaat krijg je met sprintf of printf[/edit]

Inderdaad, je moet effe naar die twee kijken. Dat kan ook nogal een verschil maken.
Jij denkt dat je bijvoorbeeld gewoon 2 hebt, maar in feite is het intern 2.00001 of 1.999999999, volgens mij was dat dus het probleem.
Als je daar dan steeds mee verder rekent krijg je een 'heel groot' verschil uiteindelijk.

Met floor krijg ik 199
Met printf & sprintf krijg ik 199.99

Reageren