Afronden 2 decimale

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk Oskam

Henk Oskam

09/09/2019 19:32:54
Quote Anchor link
Hoi,

Ik heb deze regel in mijn script staan:

echo '<div class="woocommerce-message">Je bent € ' . ($maximum - $current) . ' verwijderd van GRATIS verzending binnen Nederland!</div>';

Ik wil de uitkomst graag afronden in 2 cijfers achter de komma.
dus 0,05 cent ipv 0,050000011 cent.

Wie kan mij helpen??

Groet Henk
 
PHP hulp

PHP hulp

15/09/2019 17:02:47
 
Adoptive Solution

Adoptive Solution

09/09/2019 19:35:38
Quote Anchor link
Kom, kom, wat is er moeilijk aan om even de handleiding te raadplegen.
https://www.php.net/manual/en/function.round.php
 
Sylvester vader

sylvester vader

09/09/2019 20:02:15
Quote Anchor link
ik moet Adoptive Solution gelijk geven want dit is iets dat je echt in 2 sec kan vinden op internet
echter is dit toevalig iets wat ik heel veel heb moeten doen dus zal ik je helpen

het kan eigelijk op meerdere manieren
wat Adoptive Solution bedoeld is simpelweg de functie round()

voorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
round(0,050000011, 2);

maakt dus 0,05

andere manier is number_format()
echter raad ik deze voor simpelweg afronden af
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
number_format(0,050000011, 2);

wordt dus ook 0,05
verder info kan je hierover vinden op php.net
 
Rob Doemaarwat

Rob Doemaarwat

09/09/2019 20:19:38
Quote Anchor link
round() is om af te ronden. Als je echter een getal afrond met minder decimalen, dan krijg je er niet zomaar automagisch "nullen" bij.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
print(round(5.10,2)); //5.1
print(round('5.10',2)); //5.1

Met number_format() formatteer je een nummer, en dan krijg je dus een string (stuk tekst) terug. En dus evt. extra nullen op het eind. Maar let op, met de default parameters komt er ook een komma tussen de duizendtallen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
print(number_format('5000.10',2)); //'5,000.10'
En met die komma gaat PHP het niet meer als een getal zien ...
Gewijzigd op 09/09/2019 20:20:06 door Rob Doemaarwat
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/09/2019 21:51:46
Quote Anchor link
In aanvulling op Rob:

round() gebruik je om getallen af te ronden waarna je er mee verder kunt rekenen of dit afgeronde getal kunt bewaren (bijvoorbeeld in de database).

number_format() gebruik je enkel voordat je het getal "in een bepaald formaat" wilt tonen. Dit gebruik je dus typisch bij de output (In de HTML, een email of een PDF). je kunt er hierna niet meer mee rekenen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$price
= 1110.90;
$btw_percentage = 0.21;
$btw_amount = $price * $btw_percentage; // 233.289

// voorkom afrondings verschillen

$btw_amount = round($btw_amount, 2); // afronden op centen: 233.29
$price_incl = $price + $btw_amount; // Yeah ik kan nog steeds rekenen met het afgeronde BTW bedrag :-)
echo number_format($price, 2, ',', '.') . ' + ' . number_format($btw_amount, 2, ',', '.') . ' = ' . number_format($price_incl, 2, ',', '.');

?>

Resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
1.110,90 + 233,29 = 1.344,19
Gewijzigd op 09/09/2019 21:54:11 door Frank Nietbelangrijk
 
Henk Oskam

Henk Oskam

09/09/2019 21:58:45
Quote Anchor link
Bedankt voor de reacties,

Voor jullie natuurlijk allemaal gesneden koek, voor mij niet.
Ik ben geen programmeur en weet hier niet veel van.

Sorry voor mijn onwetendheid, ik wilde alleen een stukje in mijn website mooier maken voor de bezoekers.

Gelukkig heb ik meer verstand van ..... :-)
 
Thomas van den Heuvel

Thomas van den Heuvel

09/09/2019 22:35:04
Quote Anchor link
Frank Nietbelangrijk op 09/09/2019 21:51:46:
round() gebruik je om getallen af te ronden waarna je er mee verder kunt rekenen

Actually, tussentijds afronden is nagenoeg nooit een goed idee. Afronden doe je bij voorkeur helemaal aan het einde.

Maar inderdaad, iets afronden en (vervolgens) tonen met twee decimalen precisie zijn twee verschillende dingen.
Gewijzigd op 09/09/2019 22:36:21 door Thomas van den Heuvel
 
Sylvester vader

sylvester vader

10/09/2019 09:51:18
Quote Anchor link
even iets anders tussendoor hoor wisten jullie dat belasting-technisch afronden op 2 decimalen, eigenlijk helemaal niet goed is

de overheid en dan voornamelijk de belastingdienst wil eigenlijk dat als je gaat rekenen het afrond op 3 decimalen, en als de gehele som klaar is pas naar 2

dit heeft te maken met cent verschillen
kleine uitleg hieronder

afronden gaat zo 1 tot 4 is afronden naar beneden
5 tot 9 is afronden naar boven

dus even een voorbeeld
4,55511 + 4,55511 = 9,11022 afgerond 9,11
echter als je deze dus eerst zou afronden dan wordt het
4,56 + 4,56 = 9,12
 
Ward van der Put
Moderator

Ward van der Put

10/09/2019 11:17:17
Quote Anchor link
Nee, er zijn twee afrondingsmethoden voor verkoopprijzen en factuurbedragen. Daarvan moet je er één consistent aanhouden (in accountancy de bestendige gedragslijn genoemd):

Quote:
Bij het afronden mag u kiezen uit 2 methodes:

• U rondt af per geleverd goed of verrichte prestatie.
• U rondt het totaalbedrag af.


De derde afrondingsmethode is eenvoudiger maar pas je later toe: je mag bedragen in belastingaangiften in je voordeel afronden op hele euro's, dus lasten naar boven en baten naar beneden.

Zie: https://www.belastingdienst.nl/wps/wcm/connect/bldcontentnl/belastingdienst/zakelijk/btw/administratie_bijhouden/facturen_maken/btw-bedrag_afronden
 
Sylvester vader

sylvester vader

10/09/2019 12:22:59
Quote Anchor link
jup dat klopt maar ik maak bv online boekhoud software
en dan gelden er iets andere regels
zolang ik de bedragen niet laat zien aan de klant moet ik ze berekenen met 3 decimalen
op het moment dat er een bedrag in beeld komt en dus afgerond dan is dit met 2 decimalen
en dus vast
ik kan dit niet meer terug draaien want dan komen er fouten :)

die euro afronding heeft de belastingdienst toen ingevoerd omdat veel mensen dus niet goed boekouding doen en er dus altijd cent verschillen zijn

in goede boekhoud software heb je dit dus niet

met cent verschillen kan het belasting verschil soms wel duizenden euros zijn
daarom moet in officiele software het berekent worden met 3



Toevoeging op 10/09/2019 14:32:00:



daarin staat precies wat ik dus ook zeg
//////////////////
U gebruikt voor de afronding van het btw-bedrag de rekenkundige methode. Als het bedrag van de verschuldigde btw op de factuur bestaat uit meer dan 2 cijfers achter de komma, dan rondt u het 3e cijfer achter de komma af op hele centen. Dit doet u als volgt:

Is het 3e cijfer achter de komma lager dan 5, dan rondt u het bedrag naar beneden af.
Is het 3e cijfer achter de komma 5 of hoger, dan rondt u het bedrag naar boven af.


het factuur is iets dat een klant of persoon voor zich krijgt en dus kan je deze afronden
echter wordt de gehele berekening die je dus niet ziet, gedaan met deze reken methode :P


Toevoeging op 10/09/2019 14:39:09:

elke andere manier van berekenen geeft op lange termijn problemen
ongeacht of het mag of niet

het zijn in princiepe maar centen, maar als je bv als bedrijf inkomstenbelasting moet betalen
of btw dan kunnen die centen heel gouw oplopen
in miljoenen bedrijven zit hierin heel veel geld

zo is onderandere het idee van bv bitcoins ook deels ontstaan

ik heb een keer voor een bedrijf de gehele boekhouding opnieuw gedaan om dat ze steeds kleine verschillen hadden
aan het eind had ik een belasting terug gave van meer dan 7,000 alleen vanwege die stomme centen
 
Ward van der Put
Moderator

Ward van der Put

10/09/2019 14:54:14
Quote Anchor link
Het kan zelfs een slordige € 50.000 per jaar schelen:

https://www.nrc.nl/nieuws/2008/01/26/ah-let-ook-met-fiscus-goed-op-de-kleintjes-11476029-a1216

Je kunt het probleem overigens ook oplossen door niet (alleen) de uitkomst op te slaan, maar tevens de oorspronkelijke aantallen en prijzen per stuk. Zo behoud je namelijk maximale nauwkeurigheid zonder afronding en kun je achteraf reconstrueren hoe een uitkomst tot stand is gekomen.
 
Sylvester vader

sylvester vader

10/09/2019 18:05:51
Quote Anchor link
Ward van der Put op 10/09/2019 14:54:14:
Je kunt het probleem overigens ook oplossen door niet (alleen) de uitkomst op te slaan, maar tevens de oorspronkelijke aantallen en prijzen per stuk.


haha dat is precies waarom mijn systeem goud waard is volgens belastingdienst:P
in mijn boekhoudsoftware worden de bedragen waarmee gerekend moet worden opgeslagen in de database
en het script die ik heb gemaakt doet de rest in samenwerking met een cache systeem
anders duurt het rekenen heeeeeeeeeeeeeel lang
 
Willem vp

Willem vp

11/09/2019 13:15:48
Quote Anchor link
Sylvester vader op 10/09/2019 12:22:59:

Nee, daar staat iets heel anders. Er staat niet dat je tussentijds moet/mag afronden op 3 decimalen, maar alleen dat wanneer het onafgeronde bedrag meer dan 2 decimalen bevat, je bij het afronden op basis van de derde decimaal moet bepalen of je de tweede decimaal naar boven of naar beneden afrondt.

Tussentijds afronden, op hoeveel decimalen dan ook, kan altijd tot een 'verkeerde' afronding leiden. Stel dat je het bedrag 7,1445 afrondt op 3 decimalen. Je krijgt dan 7,145, wat bij afronding op 2 decimalen leidt tot 7,15. Terwijl het op basis van het onafgeronde bedrag 7,14 zou moeten zijn.

De kans dat je bij de tweede decimaal afrondingsverschillen krijgt neemt wel af als je tussentijds afrondt op drie decimalen, maar hij is dus niet nul. Het is daarom altijd het beste om te werken met onafgeronde getallen (of op zijn minst een stuk meer dan 3 decimalen te gebruiken). Waarom denk je dat Bitcoins tot op 8 decimalen nauwkeurig worden opgeschreven? En er zijn cryptocurrencies die nog veel preciezer worden uitgedrukt; de handelssites rekenen intern vaak al met 24 decimalen.
 



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.