PHP afronden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Joost van der Meijden

Joost van der Meijden

31/05/2010 22:01:33
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>&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.
 
PHP hulp

PHP hulp

26/12/2024 14:33:30
 
Jan Koehoorn

Jan Koehoorn

31/05/2010 22:05:05
Quote Anchor link
number_format($bruto_loon, 2, ', ', '.')

rond af op twee cijfers na de komma, dus PHP doet het goed. Gebruik liever de functie round().
 
- Mark -

- Mark -

31/05/2010 22:05:43
Quote Anchor link
je rond nergens af, number_format kapt af als ik het goed heb.

$bruto_loon = round($bruto_uurloon * $gewerkte_uren);
Gewijzigd op 31/05/2010 22:10:35 door - Mark -
 
Joost van der Meijden

Joost van der Meijden

31/05/2010 22:09:32
Quote Anchor link
round($bruto_loon, 2) geeft precies hetzelfde resultaat.

Edit, dat van Mark werkte wel, thnx :)
Gewijzigd op 31/05/2010 22:10:45 door Joost van der Meijden
 
Noppes Homeland

Noppes Homeland

31/05/2010 22:09:43
Quote Anchor link
PHP zegt helemaal niet dat het 199,99

PHP 5.2.13
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>&euro;'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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
Gewijzigd op 31/05/2010 22:14:44 door Noppes Homeland
 
Richard van Velzen

Richard van Velzen

31/05/2010 22:12:48
Quote Anchor link
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

Joost van der Meijden

31/05/2010 22:13:33
Quote Anchor link
Joost van der Meijden op 31/05/2010 22:12:42:
Noppes Homeland op 31/05/2010 22:09:43:
PHP zegt helemaal niet dat het 199,99

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>&euro;'.number_format($bruto_loon, 2, ', ', '.').'</td></tr>';
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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


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:

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
 
Noppes Homeland

Noppes Homeland

31/05/2010 22:18:01
Quote Anchor link
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
Gewijzigd op 31/05/2010 23:02:24 door Noppes Homeland
 
Sander de Vos

Sander de Vos

31/05/2010 23:10:03
Quote Anchor link
floor?
 

31/05/2010 23:32:29
Quote Anchor link
Noppes Homeland op 31/05/2010 22:18:01:
Edit:

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.
Gewijzigd op 31/05/2010 23:37:10 door
 
Joost van der Meijden

Joost van der Meijden

31/05/2010 23:46:33
Quote Anchor link
Met floor krijg ik 199
Met printf & sprintf krijg ik 199.99
 
Hipska BE

Hipska BE

01/06/2010 09:21:21
Quote Anchor link
Weet je eigenlijk wel waar je mee bezig bent? Heb je 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.
 
Elwin - Fratsloos

Elwin - Fratsloos

01/06/2010 10:27:51
Quote Anchor link
Als ik het laat uitrekenen door PHP krijg ik om precies te zijn: 199,99499999999994770405464805662631988525390625. En volgens mij moet dat correct afgerond worden op 199,99 (aangezien het derde getal achter de komma een 4 is).

Als ik het PHP laat afronden is het 200,00.
 
Jo colling

jo colling

01/06/2010 10:36:38
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

01/06/2010 12:27:26
Quote Anchor link
Bij mijn weten kijk je bij afronden naar het eerst volgende cijfer na het punt tot waar je wilt afronden. Dus in het geval van het getal van Elwin zou je bij afronden op 2 decimalen inderdaad 199.99 verwachten en geen 200.00.

Het lijkt mij eerder een bugje in de round() functie van PHP te zijn. Zie het verschil:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo round(199.9949999999999, 2); // 200
echo round(199.994999999999, 2); // 199.99
?>


@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.
 
Jo colling

jo colling

01/06/2010 12:33:55
Quote Anchor link
Je hebt gelijk ik kom ook 199.99 uit het zal een foutje zijn in php of elwin zal het verkeerd gelezen hebben
 



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.