Geldsommen
ik ben bezig met een geldsommen script.
Ik krijg een aantal variabelen door via een html formulier zoals:
maximaal bedrag van de producten
prijs afronden op: 001, 002, 005, 010, 020, 050, 100 en 200 cent
betalen met: 001, 002, 005, 010, 020, 050, 100, en 200 cent
Wat is mijn bedoeling:
stel de instelling is:
maximaal bedrag: 2 euro
afronden op: 005 cent
betalen met: 020, 050, 100 en 200 cent.
ik maak een random bedrag aan voor een product, bijvoorbeeld een tandenborstel voor 1,25 euro.
Ik loop nu door de array van betalen met en vergelijk als het random bedrag lager is dan het te betalen bedrag.
De eerste in dit geval is dus de 2 euro munt en die wordt dan als image geplaatst, tot zover gaat het goed.
Maar wat nu als ik wil betalen met 1 euro en 50 cent, of met 1 euro en 1 van 20 cent en 1 van 10 cent
Ik ben al een poosje aan het denken hoe ik dat kan fixen.
Ik wil dan dus de benodigde images van de 1 euro, 20 cent en de 10 cent laten zien.
Iemand enig idee?
Ward:
Titel aangepast.
Gewijzigd op 27/06/2016 14:43:42 door Ward van der Put
Maak een herhaalde lus (loop) waarin je de hoogst mogelijke munt steeds aftrekt van het restantbedrag totdat het restantbedrag 0 is.
Image tandenbordstel Prijs: 1,25 betalen met: image 1 euro munt je krijgt terug 5 cent
image 20 eurocent
image 10 eurocent
Bedoel dat ik nu ook een lus kan maken totdat ik onder de 0 kom?
Hier de foreach die ik nu gebruik.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
foreach ($muntgeld as $munten) {
// zet het muntgeld naar 2 digits
$munten = number_format ((float) $munten / 100, 2, '.', '');
// haal de . uit het muntbedrag
$munten = str_replace(".","", $munten);
// haal de . uit de random prijs
$vergelijkmet = str_replace(".","", $inhoud['prijs']);
// is het muntbedrag groter dan de random prijs
if ($munten > $vergelijkmet) {
// zet het image voor de munt
$munt = "../images/geld_images/".$munten.".png";
// we hebben een munt gevonden, stop met zoeken
break;
}
}
foreach ($muntgeld as $munten) {
// zet het muntgeld naar 2 digits
$munten = number_format ((float) $munten / 100, 2, '.', '');
// haal de . uit het muntbedrag
$munten = str_replace(".","", $munten);
// haal de . uit de random prijs
$vergelijkmet = str_replace(".","", $inhoud['prijs']);
// is het muntbedrag groter dan de random prijs
if ($munten > $vergelijkmet) {
// zet het image voor de munt
$munt = "../images/geld_images/".$munten.".png";
// we hebben een munt gevonden, stop met zoeken
break;
}
}
Gewijzigd op 27/06/2016 15:20:02 door Sietsko Bos
Zit er een specifieke combinatie van munten in de portemonnee of zijn die eindig? In het eerste geval heb je een pool met bekende combinaties van bruikbare munten, in het tweede geval is betalen veel eenvoudiger. Dat is een ontwerpbeslissing.
Of je onder 0 kunt uitkomen, is afhankelijk van of je wisselgeld wilt ondersteunen: als je € 1,25 betaalt met een munt van € 2, dan krijg je normaliter € 0,50 + € 0,20 + € 0,05 terug. Dat is ook een ontwerpbeslissing.
Ward van der Put op 27/06/2016 15:22:55:
Maar € 1,25 betaal je toch met 3 munten van achtereenvolgens € 1, € 0,20 plus € 0,05?
Dat klopt, maar ik wil dus dat er uitgerekend word wat je terugkrijgt als je betaald met 1, 0,20, en 0,10.
Ik heb het nu wil zo dat je met een munt van 2 euro betaald dat hij die munt ook laat zien.
Heb alleen geen idee hoe het zo te maken dat het script ook kiest voor 1, 0,20 en 0,10
Er zijn geen specifieke combinaties, ik wil eigenlijk random laten beslissen welke munten ik mee betaal, maar wel zo dat het betaalbedrag hoger is dan het te betalen bedrag zodat je altijd geld terug krijgt.
Gewijzigd op 27/06/2016 15:45:58 door Sietsko Bos
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$EuroMunten = array(1,2,5,10,20,50,100,200);
$TeBetalen = rand(1,1000);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
do
{
$key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $TeBetalen)
{
$RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
} while($TeBetalen != $RekenHulp);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '');
echo '<br/><br/>';
foreach($IkBetaalMet as $key => $value)
{
if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
?>
$EuroMunten = array(1,2,5,10,20,50,100,200);
$TeBetalen = rand(1,1000);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
do
{
$key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $TeBetalen)
{
$RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
} while($TeBetalen != $RekenHulp);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '');
echo '<br/><br/>';
foreach($IkBetaalMet as $key => $value)
{
if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
?>
Het is niet helemaal wat ik zoek.
Ik zal proberen om wat duidelijker te zijn.
Hier een link van hoe het resultaat nu is - https://nl.pinterest.com/pin/367043438363828494/
Het eerste artikel is nu 80 cent die wordt nu betaald met een euro, maar het is de bedoeling dat er bijvoorbeeld ook betaald wordt met 0,50 en 2 x 0,20
Het derde artikel wordt betaald met 2 euro, maar zou ook kunnen zijn 1 van 1 euro en 1 van 0.10 of 0.20 of 0.50
Het lukt me wel om de eerste munt te kiezen die hoog genoeg is maar niet met meerdere munten.
Hopelijk is het zo iets duidelijker?
Oh, wat irritant, als je ergens op klikt moet je inloggen/aanmelden.
Ik kan dus niks bekijken.
Gewijzigd op 27/06/2016 18:43:30 door - SanThe -
Bedrag van 1,45 zou de ene keer betaald kunnen worden met 1 x 1 euro en 1 x 0.50 maar de andere keer met een 2 euro munt of met 1 x 1 euro en en 3x 0.20 dit mag/moet juist variabel zijn.
Hier een linkje die wel werkt: http://www.juf-milou.nl/geldsommen.jpg
Gewijzigd op 27/06/2016 19:03:51 door Sietsko Bos
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
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
<?php
$EuroMunten = array(1,2,5,10,20,50,100,200);
$RetourMunten = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,150);
do
{
$IkBetaalMet = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaalMet < $TeBetalen);
$RetourBedrag = $IkBetaalMet - $TeBetalen;
$RekenHulp = 0;
$key = count($EuroMunten);
do
{
$key--;
do
{
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $RetourBedrag)
{
$RekenHulp += $munt;
$RetourMunten[$key]++;
}
} while($RetourBedrag >= ($RekenHulp + $munt));
} while($RetourBedrag != $RekenHulp);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal met €'.number_format($IkBetaalMet/100, 2, '.', '').'<br/>';
echo '<br/>';
foreach($RetourMunten as $key => $value)
{
if($RetourMunten[$key] > 0) echo $RetourMunten[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($RetourMunten[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
?>
$EuroMunten = array(1,2,5,10,20,50,100,200);
$RetourMunten = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,150);
do
{
$IkBetaalMet = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaalMet < $TeBetalen);
$RetourBedrag = $IkBetaalMet - $TeBetalen;
$RekenHulp = 0;
$key = count($EuroMunten);
do
{
$key--;
do
{
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $RetourBedrag)
{
$RekenHulp += $munt;
$RetourMunten[$key]++;
}
} while($RetourBedrag >= ($RekenHulp + $munt));
} while($RetourBedrag != $RekenHulp);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal met €'.number_format($IkBetaalMet/100, 2, '.', '').'<br/>';
echo '<br/>';
foreach($RetourMunten as $key => $value)
{
if($RetourMunten[$key] > 0) echo $RetourMunten[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($RetourMunten[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
?>
3 x 2.00 + 1 x 0.50 + 1 x 0.20
of
4 x 2.00
of
2 x 2.00 + 2 x 1.00 + 1 x 0.50 + 1 x 0.20
Het is dus de bedoeling dat de ene munt in de afbeelding wordt vervangen door meerdere.
Gewijzigd op 27/06/2016 19:22:14 door Sietsko Bos
Je wilde toch wat je retour krijgt.
Maar is nog niet wat ik nodig heb.
In jou script krijg je om te betalen altijd 1 munt (dat heb ik nu ook) zie afbeelding http://www.juf-milou.nl/geldsommen.jpg , dit zouden meerdere moeten worden.
Wat je terug krijgt van het betaalde bedrag moet uitgerekend worden door een leerling, dus dat hoeft niet terug te komen in het script.
Want 30 cent betaal je bv. met 1 euro maar niet met 2 x 50 cent. ;-)
Ik ga nu eerst even wat eten.
Gewijzigd op 27/06/2016 19:38:06 door - SanThe -
Gelukkig is nu wel duidelijk wat de bedoeling is.
Wel grappig, zie dat je uit ZH komt daar ben ik morgen ook weer :-)
Oh dit heeft niks met het script te maken haha
Eet smakelijk.
Gewijzigd op 27/06/2016 21:18:48 door Sietsko Bos
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
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
<?php
# Dit array kun je aanvullen als je wilt
$EuroMunten = array(1,2,5,10,20,50,100,200);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,end($EuroMunten));
do
{ $IkBetaal = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaal < $TeBetalen);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal €'.number_format($IkBetaal/100, 2, '.', '').'<br/>';
echo '<br/>';
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
do
{ $key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $IkBetaal and $munt > ($IkBetaal - $TeBetalen))
{ $RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
$teller++;
if($teller == 1000)
{ $IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
}
} while($IkBetaal != $RekenHulp);
foreach($IkBetaalMet as $key => $value)
{ if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
echo '<br/>';
?>
# Dit array kun je aanvullen als je wilt
$EuroMunten = array(1,2,5,10,20,50,100,200);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,end($EuroMunten));
do
{ $IkBetaal = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaal < $TeBetalen);
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal €'.number_format($IkBetaal/100, 2, '.', '').'<br/>';
echo '<br/>';
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
do
{ $key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $IkBetaal and $munt > ($IkBetaal - $TeBetalen))
{ $RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
$teller++;
if($teller == 1000)
{ $IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
}
} while($IkBetaal != $RekenHulp);
foreach($IkBetaalMet as $key => $value)
{ if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
echo '<br/>';
?>
Gewijzigd op 27/06/2016 22:39:27 door - SanThe -
Ik zal het morgen of overmorgen eens in mijn script verwerken en kijken hoe het gaat.
Dank je voor je hulp :)
Het script werkt echt goed alleen....
Is het mogelijk om het script zo aan te passen op een totaal aantal muntjes of briefgeld wat je kan gebruiken?
Dus bijvoorbeeld:
maximaal 4 muntjes
maximaal 1 briefje + maximaal 2 muntjes
maximaal 2 briefjes
Zou je hier nog eens naar willen kijken, want ik was al aan het puzzelen maar kom er gewoon niet uit.
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
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
<?php
$maxMunten = 3;
$maxBiljetten = 1;
# Dit array kun je aanvullen als je wilt
$EuroMunten = array(1,2,5,10,20,50,100,200,500,1000);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,end($EuroMunten));
do
{ $IkBetaal = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaal < $TeBetalen);
if($maxMunten == 0)
{ $maxMunten = 1;
}
if($IkBetaal > 200 and $maxBiljetten == 0)
{ $maxBiljetten = 1;
}
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal €'.number_format($IkBetaal/100, 2, '.', '').'<br/>';
echo '<br/>';
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
do
{ $key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $IkBetaal and $munt > ($IkBetaal - $TeBetalen))
{ $RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
$teller++;
if($teller == 1000 or array_sum(array_slice($IkBetaalMet,0,8)) > $maxMunten or array_sum(array_slice($IkBetaalMet,8)) > $maxBiljetten)
{ $IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
}
} while($IkBetaal != $RekenHulp);
foreach($IkBetaalMet as $key => $value)
{ if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
echo '<br/>';
?>
$maxMunten = 3;
$maxBiljetten = 1;
# Dit array kun je aanvullen als je wilt
$EuroMunten = array(1,2,5,10,20,50,100,200,500,1000);
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$TeBetalen = rand(1,end($EuroMunten));
do
{ $IkBetaal = $EuroMunten[rand(0,count($EuroMunten)-1)];
} while($IkBetaal < $TeBetalen);
if($maxMunten == 0)
{ $maxMunten = 1;
}
if($IkBetaal > 200 and $maxBiljetten == 0)
{ $maxBiljetten = 1;
}
echo 'Te betalen €'.number_format($TeBetalen/100, 2, '.', '').'<br/>';
echo 'Ik betaal €'.number_format($IkBetaal/100, 2, '.', '').'<br/>';
echo '<br/>';
$IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
do
{ $key = rand(0,count($EuroMunten)-1);
$munt = $EuroMunten[$key];
if(($munt + $RekenHulp) <= $IkBetaal and $munt > ($IkBetaal - $TeBetalen))
{ $RekenHulp += $munt;
$IkBetaalMet[$key]++;
}
$teller++;
if($teller == 1000 or array_sum(array_slice($IkBetaalMet,0,8)) > $maxMunten or array_sum(array_slice($IkBetaalMet,8)) > $maxBiljetten)
{ $IkBetaalMet = array_fill(0,count($EuroMunten),0);
$RekenHulp = 0;
$teller = 0;
}
} while($IkBetaal != $RekenHulp);
foreach($IkBetaalMet as $key => $value)
{ if($IkBetaalMet[$key] > 0) echo $IkBetaalMet[$key].' x €'.number_format($EuroMunten[$key]/100, 2, '.', '').' = €'.number_format($IkBetaalMet[$key]*$EuroMunten[$key]/100, 2, '.', '').'<br/>';
}
echo '<br/>';
?>
$maxMunten en $maxBiljetten kan je zelf aanpassen.
Gewijzigd op 01/07/2016 15:53:02 door - SanThe -
Geweldig van je snelle reactie, dank je ik ga dit van de week eens proberen in te bouwen en dan laat ik weten hoe het allemaal werkt :)