PHP afronden
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?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>€'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>
$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>€'.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.
rond af op twee cijfers na de komma, dus PHP doet het goed. Gebruik liever de functie round().
PHP 5.2.13
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?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>€'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>
$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>€'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>
Met ander woorden, je doet niets fout
Edit:
number_format behoort volgens de regels af te ronden
number_format behoort volgens de regels af te ronden
Gewijzigd op 31/05/2010 22:14:44 door Noppes Homeland
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:
Met jouw code krijg ik toch echt 199,99 als uitkomst hoor ...
Noppes Homeland op 31/05/2010 22:09:43:
PHP zegt helemaal niet dat het 199,99
Met ander woorden, je doet niets fout
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?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>€'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>
$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>€'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>
Met ander woorden, je doet niets fout
Edit:
number_format behoort volgens de regels af te ronden
number_format behoort volgens de regels af te ronden
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 :)
Kheb een iMac, en volgensmij is dat 64BIT ja, maar het werkt nu iig :)
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?
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?
Gewijzigd op 31/05/2010 22:18:53 door Joost van der Meijden
Maar zie de opmerking van Richard.
Edit:
wat voor resultaat krijg je met sprintf of printf
wat voor resultaat krijg je met sprintf of printf
Gewijzigd op 31/05/2010 23:02:24 door Noppes Homeland
floor?
Noppes Homeland op 31/05/2010 22:18:01:
Edit:
wat voor resultaat krijg je met sprintf of printf
wat voor resultaat krijg je met sprintf of printf
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 printf & sprintf krijg ik 199.99
php.net al eens bekeken?
Je zou zien dat floor gewoon sowieso 199 ging returnen..
Lees/leer eerst eens verder en probeer het dan nog een keer, want nu zit je gewoon lukraak functies uit te voeren waar je helemaal niet van snapt waar ze voor dienen, en dat zal je geen stap verder helpen.
Weet je eigenlijk wel waar je mee bezig bent? Heb je Je zou zien dat floor gewoon sowieso 199 ging returnen..
Lees/leer eerst eens verder en probeer het dan nog een keer, want nu zit je gewoon lukraak functies uit te voeren waar je helemaal niet van snapt waar ze voor dienen, en dat zal je geen stap verder helpen.
Als ik het PHP laat afronden is het 200,00.
Dat komt omdat je volgens de wiskunde dat je van achter moet beginnen dus bij die 9 achter de 4 die je 4 een 5 en de 5 rond hij naar boven af. dan moet je iets maken dat hij alleen de eerste 3 cijfers achter de komma meerekend.
Het lijkt mij eerder een bugje in de round() functie van PHP te zijn. Zie het verschil:
Code (php)
@Jo: wat jij zegt is volgens mij onzin. Dat zou betekenten dat je oneindige getallen (zoals pi bijvoorbeeld) nooit kunt afronden omdat je het laatste getal niet weet.
Je hebt gelijk ik kom ook 199.99 uit het zal een foutje zijn in php of elwin zal het verkeerd gelezen hebben