Restdeling
Op mijn site gebruik ik 3 betaalmiddelen:
Galjoenen (1 Galjoen = 1 euro),
Sikkels (1 Sikkel = 50 cent) en
Knoeten (1 Knoet = 10 cent).
als iets 1 Galjoen, 3 Sikkels en 5 Knoeten kost,
en je hebt: 3 Galjoenen, 2 Sikkels en 5 Knoeten,
dan zou je dat product dus eigenlijk moeten kopen omdat je 2 Galjoenen teveel hebt.
Maar omdat je 1 Sikkel te weinig hebt kun je dit niet kopen!
Nu heb ik gehoord dat je dit probleem kunt oplossen met restdeling, maar ik kan hier nergens wat over vinden.. kan iemand me hier iets van uitleggen?
Als iets 1 Galjoen, 3 Sikkels en 5 Knoeten kost, dan heb je toch genoeg aan 3 Galjoenen. Ik zie/snap het probleem niet.
Iets kost 1 Galjoen, 3 Sikkels en 5 Knoeten = 3 euro
Je hebt 3 Galjoenen, 2 Sikkels en 5 Knoeten = 4,50 euro
En dan de volgende functie te gebruiken om het weer naar jouw valuta om te rekenen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
function convert($bedrag){
$galjoenen = ceil($bedrag);
$bedrag = $bedrag - $galjoenen;
$sikkels = ceil($bedrag/0.50);
$bedrag = $bedrag - $sikkels;
$knoeten = ceil($bedrag/0.10);
$bedrag = $bedrag - $knoeten;
echo $galjoenen.'Galjoenen, '.$sikkels.' Sikkels, '.$knoeten.' Knoeten';
}
$galjoenen = ceil($bedrag);
$bedrag = $bedrag - $galjoenen;
$sikkels = ceil($bedrag/0.50);
$bedrag = $bedrag - $sikkels;
$knoeten = ceil($bedrag/0.10);
$bedrag = $bedrag - $knoeten;
echo $galjoenen.'Galjoenen, '.$sikkels.' Sikkels, '.$knoeten.' Knoeten';
}
Gewijzigd op 16/05/2010 00:21:31 door Daan Onbekend
Code (php)
En zo dus ook bij de knoeten.
euro's
centen
stel je hebt: 2 euro en 50 cent
en iets kost: 1 euro en 60 cent
dan kijk je eerst of je genoeg euro's hebt: 2-1=1 euro over; je hebt dus genoeg euro's.
dan bereken je de centen:
je hebt 50 cent en het kost 60 cent: 50-60=-10; je hebt dus te weinig centen.
Je zal op mijn site nu de melding krijgen dat je te weinig geld hebt, die database die weet niet dat 2,50 meer is dan 1,60, die denkt dat je 10 cent te kort komt.
En dát is het probleem. en nu heb ik gehoord dat je dat met restdeling kunt oplossen. maar ik weet dus niet wat restdeling is :P
Hoeveel je hebt van elk muntstuk, is alleen iets wat je zou moeten gebruiken voor het weergeven. Niet voor de berekeningen of je wel genoeg geld hebt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
#| Te betalen bedrag. // Galjoenen, Sikkels, Knoeten
$betalen = array(3, 2, 5);
#| Beurs. // Galjoenen, Sikkels, Knoeten
$beurs = array(5, 3, 4);
#| Functie voor het omzetten van een bedrag naar knoeten.
function bedrag_in_knoeten($bedrag){
return $bedrag[2] + ($bedrag[1] * 5) + ($bedrag[1] * 10);
}
#| Functie voor het terug converteren van een bedrag in knoeten.
function convert_back($bedrag){
#| Galjoenen.
$galjoenen = floor($bedrag / 10);
#| Sikkels.
$sikkels = floor(($bedrag - ($galjoenen * 10)) / 5);
#| Knoeten.
$knoeten = $bedrag - (($galjoenen * 10) + ($sikkels * 5));
#| Resultaat terug geven.
return array($galjoenen, $sikkels, $knoeten);
}
#| Functie voor het controleren of iemand genoeg geld heeft.
function geld_controle($beurs, $betalen){
return (bedrag_in_knoeten($beurs) >= bedrag_in_knoeten($betalen)) ? true : false ;
}
#| Functie voor het berekenen van de nieuwe inhoud van Uw beurs na de betaling.
/*---- LET OP! ---->
Eerst controleren of iemand genoeg geld heeft voordat deze functie wordt aangeroepen.
*/
function beurs_na_betaling($beurs, $betalen){
#| Resterend aantal knoeten berekenen.
$resterend = bedrag_in_knoeten($beurs) - bedrag_in_knoeten($betalen);
#| nieuwe beurs terug geven.
return convert_back($resterend);
}
?>
#| Te betalen bedrag. // Galjoenen, Sikkels, Knoeten
$betalen = array(3, 2, 5);
#| Beurs. // Galjoenen, Sikkels, Knoeten
$beurs = array(5, 3, 4);
#| Functie voor het omzetten van een bedrag naar knoeten.
function bedrag_in_knoeten($bedrag){
return $bedrag[2] + ($bedrag[1] * 5) + ($bedrag[1] * 10);
}
#| Functie voor het terug converteren van een bedrag in knoeten.
function convert_back($bedrag){
#| Galjoenen.
$galjoenen = floor($bedrag / 10);
#| Sikkels.
$sikkels = floor(($bedrag - ($galjoenen * 10)) / 5);
#| Knoeten.
$knoeten = $bedrag - (($galjoenen * 10) + ($sikkels * 5));
#| Resultaat terug geven.
return array($galjoenen, $sikkels, $knoeten);
}
#| Functie voor het controleren of iemand genoeg geld heeft.
function geld_controle($beurs, $betalen){
return (bedrag_in_knoeten($beurs) >= bedrag_in_knoeten($betalen)) ? true : false ;
}
#| Functie voor het berekenen van de nieuwe inhoud van Uw beurs na de betaling.
/*---- LET OP! ---->
Eerst controleren of iemand genoeg geld heeft voordat deze functie wordt aangeroepen.
*/
function beurs_na_betaling($beurs, $betalen){
#| Resterend aantal knoeten berekenen.
$resterend = bedrag_in_knoeten($beurs) - bedrag_in_knoeten($betalen);
#| nieuwe beurs terug geven.
return convert_back($resterend);
}
?>
Gewijzigd op 16/05/2010 13:37:38 door - Mark -
Gewijzigd op 16/05/2010 13:40:04 door Joren de Wit
@Blanche: Weet ik maar ik gok dat hij ze alle drie appart in de database heeft staan dus dan moet hij alles weer veranderen. Daarom voed ik de functies ook met array's. Met omslachtig bedoelde ik de manier waarop de functies in zijn werk gingen.
Quote:
Weet ik maar ik gok dat hij ze alle drie appart in de database heeft staan dus dan moet hij alles weer veranderen.
Naar mijn mening is dat dan precies wat hij moet doen. Gebruik liever geen lapmiddelen als het echte probleem eenvoudig op te lossen is ;-)