afronden($getal, afronding)

Door Eddy E, 20 jaar geleden, 15.569x bekeken

Deze functie is een net andere versie van round(), maar kan afronden op hele getallen (zoals 20).
Het rond dus getallen af naar een veelvoud van $afronding.
afronden(122, 10); geeft 120, omdat 120 het dichtstbijzijnde veelvoud van 10 is.
Zo geeft afronden(9.95, 10); dus 10 terug terwijl
afronden(234.281, 0.105); 234.255 teruggeeft.

Zie bijvoorbeeld:
http://www.zunflappie.nl/temp/afronden.php?afronding=20
http://www.zunflappie.nl/temp/afronden.php?afronding=5
http://www.zunflappie.nl/temp/afronden.php?afronding=8

Werkt zowel met decimalen etc.
Vooral bruikbaar (in reallife) bij hoeveel geld je hebt.
Als je 1228,28 euro hebt noem je dat 1200 euro.
In deze functie is dat: afronden(1228.28, 100);, wat dus 1200 geeft.

[BIJGEWERKT!!!]
Deze functie kan vanaf nu ook tijden afronden.
Afronden kan op uren, minuten en seconden.

Zie bijvoorbeeld:
http://www.zunflappie.nl/temp/afronden.php?afronding=0:30
http://www.zunflappie.nl/temp/afronden.php?afronding=0:00:30
http://www.zunflappie.nl/temp/afronden.php?afronding=4:00

Voorbeeld: http://www.zunflappie.nl/temp/afronden.php

Gesponsorde koppelingen

PHP script bestanden

  1. afrondendollargetal-afronding

 

Er zijn 16 reacties op 'Afrondendollargetal afronding'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Citroen Anoniem Graag
Citroen Anoniem Graag
20 jaar geleden
 
0 +1 -0 -1
Laat maar,, ik zie nu het teksje pas..
Peter Wessels
Peter Wessels
20 jaar geleden
 
0 +1 -0 -1
[qoute] Deze functie is een net andere versie van round(), maar kan afronden op hele getallen (zoals 20). [/qoute]

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$string
= "122,10";
$round = round($string, 0);

echo $round;
?>


Output: 122;

Round kan dat ook, of heb ik het nou verkeerd?
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Ja dat klopt, round() werkt zo:
round(12.34, 1); -> 12.3
round(12.34, 0); -> 12
round(12.34, -1); -> 10

maar deze functie werkt zo:
afronden(1234, 1); -> 1234
afronden(1234, 10); -> 1230
afronden(1234, 100); -> 1200
afronden(1234, 1000); -> 1000
Peter Wessels
Peter Wessels
20 jaar geleden
 
0 +1 -0 -1
En wat is dan de toevoeging van dit script? Want round(), kan precies hetzelfde, het werkt alleen heel ietsje anders.

Heb de vorige script van je gemist, maar wil je me uitleggen hoe dit script verschilt met round()?
Douwe
Douwe
20 jaar geleden
 
0 +1 -0 -1
Voor het verschil moet je de tekst even lezen :) En functies hebben altijd als nut dat het ook met veel code kan, maar zo met veel minder ;)
Eddy E
Eddy E
20 jaar geleden
 
0 +1 -0 -1
Zoals Tommy het reeds verhelderde is dit geen vervanger van round() maar een soortgelijke functie.

Het rond getallen af naar de dichtstbijzijnde veelvoud van $afronding.
Je kan met deze functie dus zoeken naar het dichtstbijzijnde getal in de tafel van $afronding.
Round() kent alleen de tafel van 1, 10, 100, 1000 etc.
Deze functie kent alle tafels (dus ook die van 25, 100, 5 etc).
Dus wil je het het 5-tal weten van 122, dan wordt dat 120 (want 120 zit in de tafel van 5 en 122 niet).
Wil je het 25-tal weten van 125, dan wordt dat 125. Want 125 zit in de tafel van 25.

Het zoekt dus het getal in de tafel van $afronding welke het dichte bij $getal ligt.
Een aantal voorbeelden van de tafel van 5:

afronden(12.4, 5); = 10
afronden(13.3, 5); = 15
afronden(22, 5); = 20
afronden(12382, 5); = 12380

Bij geld zou je dit gebruiken.
Je zegt niet dat je 61,32 euro in je portomonee hebt, maar 60 euro.
Dus afronden(61.32, 10); geeft 60.
Dat kan met round ook, maar als ik wil weten welk 20-tal (denk aan muntjes van 20 cent) hebt, is round() daartoe niet voldoende toegerust.
Eddy E
Eddy E
20 jaar geleden
 
0 +1 -0 -1
Ik heb het voorbeeld iets aangepast:

http://www.zunflappie.nl/temp/afronden.php?afronding=20
http://www.zunflappie.nl/temp/afronden.php?afronding=5

Met het laatste cijfer kan je het even uitproberen, wat toch makkelijker zal werken.
Peter Wessels
Peter Wessels
20 jaar geleden
 
0 +1 -0 -1
@Douwe M
Dat stond er nog niet toen ik dat schreef;)

@Eddy Erkelens

Ik snap hem;).
Jesper Diovo
Jesper Diovo
20 jaar geleden
 
0 +1 -0 -1
Ik moet zeggen, ik kan hier meer wijs uit dan uit round(). :P Leuk script, Eddy :-).
Onbekend Onbekend
Onbekend Onbekend
20 jaar geleden
 
0 +1 -0 -1
Dit is idd een nuttige toevoeging, zeker dat afronden op bijv 5 en van 25..
Felix b
Felix b
20 jaar geleden
 
0 +1 -0 -1
wat je ook kan gebruiken is modulo

dan krijg je zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
function afronden($getal, $afronding)
{

        if(!is_double($getal) AND !is_int($getal) AND (!is_double($afronding) AND !is_int($afronding)))
        {

        return false;
        }

    $rest = fmod($getal,$afronding);
    return ($rest / $afronding <= 0.5) ? $getal - $rest:($getal - $rest) + $afronding;
}

?>
Eddy E
Eddy E
20 jaar geleden
 
0 +1 -0 -1
Dat doet inderdaad hetzelfde. Ik kon die functie fmod() dus niet vinden.
In theorie zal dit hetzelfde moeten doen, maar daarbij kreeg ik onlogische antwoorden en heb ik het dus iets aangepast:

[linebreak]$rest = $getal % $afronding;[linebreak]

Maar goed, bovenstaande functie van Felix doet inderdaad hetzelfde, zij het wel korter.

Edit:

Script iets gewijzigd.
Er is een extra fouten-controle toegevoegd of de getallen niet 0 zijn.
En in plaats van een false terug te geven, geeft de functie het begingetal terug. Zo kan er minder fout gaan, en mocht het fout gaan, dan is er geen man overboord.
Eddy E
Eddy E
20 jaar geleden
 
0 +1 -0 -1
Even bumpen: we kunnen met deze functie vanaf nu ook TIJDEN afronden.
Bijvoorbeeld:

23:12:20 afronden met 0:30 (halve uren) wordt: 23:00:00
23:41:28 afronden met 0:30 (halve uren) wordt: 00:00:00
1:01:01 am afronden met 0:15 (kwartieren) wordt: 1:00:00
1:01:01 pm afronden met 0:15 (kwartieren) wordt: 13:00:00

Gebruik de voorbeelden om te spelen/testen!


Suggeties en verbeteringen (én kritiek!) zijn welkom!
Tikkes C
Tikkes C
20 jaar geleden
 
0 +1 -0 -1
het afronden van negatieve getallen komt positief als resultaat...terwijl ik denk dat dat dan 0 moet worden...niet?
Arian Stolwijk
Arian Stolwijk
20 jaar geleden
 
0 +1 -0 -1
Doet dit trouwens niet het zelfde??
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function afronden($getal,$veelvoud){
    if($veelvoud == 0){
        // lim->0 wordt gewoon weer het getal
        return $getal;
    }

    return round($getal / $veelvoud) * $veelvoud;
}

?>
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Eddy E
Eddy E
20 jaar geleden
 
0 +1 -0 -1
@ Tikkes: ik zal er een abs() over gooien inderdaad.
@ Arian: gedeeltelijk, maar dan moet je alsnog bij de round() de afronding (aantal cijfers achter komma etc) opgeven.
Het kan dus wel, maar wat ik nu heb, vind ik iets overzichtelijker.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. afrondendollargetal-afronding

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.