Hallo,
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?

Maak een herhaalde lus (loop) waarin je de hoogst mogelijke munt steeds aftrekt van het restantbedrag totdat het restantbedrag 0 is.
Ik hoef niet op nul uit te komen, even nog een verduidelijken.

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.

<?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;
}
}
Maar € 1,25 betaal je toch met 3 munten van achtereenvolgens € 1, € 0,20 plus € 0,05?

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.
Geen idee wat je precies wilt, maar misschien heb je hier iets aan.
<?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/>';
}
?>
Dankje - SanThe - voor je reactie,

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?
Je wilt altijd de hoogste munten hebben?

Oh, wat irritant, als je ergens op klikt moet je inloggen/aanmelden.
Ik kan dus niks bekijken.
Niet altijd de hoogste munt, maar wel het aantal munten hoger dan het te betalen bedrag.
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
<?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/>';
}
?>
Ik krijg nog steeds het precieze bedrag, dit is juist niet de bedoeling omdat er uitgerekend moet worden hoeveel geld je terug krijgt. Een bedrag van 6.60 zou dus moeten geven:

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.

Reageren