Korting per 3 artikelen berekenen

Status
Niet open voor verdere reacties.

faelsendoorn

Gebruiker
Lid geworden
2 jun 2012
Berichten
16
Ik ben bezig met het programmeren in JavaScript om mijn vaardigheden daarin te verbeteren.
Ik loop tegen het probleem aan dat ik niet goed kan inzien hoe ik het volgende moet doen: bij een visboer kan je (nu nog) 2 artikelen bestellen. Afhankelijk van het aantal artikelen per artikel krijg je per 3 stuks korting.
Voorbeeld: bij 6 bakken kibbeling krijg je 6*0.16 = 0.96 cent korting op de subtotaalprijs van kibbeling. bij 12 viskoekjes krijg je 12*0.16 = 1.92 korting op de subtotaalprijs van viskoekjes.

Ik wortel met hoe ik dit algoritmisch kan neerzetten. Ik weet dat ik veelvouden van 3 nodig heb en misschien wel een wiskundige sommatie functie?

HTML:
<html>
<head><title>Oefenen</title></head>

<body style = "background-color:powderblue;"> 
De prijs van een <u>bakje kibbeling</u> (<b>300 gram</b>) is € <span id = "labelKibbelingPrijs"></span> met gratis saus. <br>
De prijs van een <u>viskroket</u> is € <span id = "labelViskroketPrijs"></span>.<br><br>
Voer het aantal bakjes kibbeling in dat je wilt: <input type = "number" min = "0" id = "invoerveldAantalKibbeling"> <br>
Voer het aantal viskoekjes in dat je wilt: <input type = "number" min = "0" id = "invoerveldAantalViskoekjes">

<input type = "button" id = "btn1" value = "Bereken prijs" onclick = "berekening()">

<hr>

Aantal bakjes kibbeling: <span id = "label1"></span> <br>
Aantal viskoekjes: <span id = "label2"></span><br><br><br>

Prijs kibbeling: <span id = "prijsKibbeling"></span><br>
Prijs viskoekje: <span id = "prijsViskoekje"><span><br><br><br>

Korting kibbeling: <span id = "kortingKibbeling"></span><br>
Korting viskoekje: <span id = "kortingViskoekje"></span><br>

<hr>
Totaalprijs: <span id = "label3"></span>

</body>
</html>

[JS]
var artikelen = [
["Kibbeling", 6.00],
["Viskoekje", 1.25]
];

labelKibbelingPrijs.innerHTML = (artikelen[0][1]).toFixed(2);
labelViskroketPrijs.innerHTML = artikelen[1][1].toFixed(2);

function berekening() {
var aantalKibbeling, aantalViskoekjes, subPrijsKibbeling, subPrijsViskoekje, totaalPrijs;

aantalKibbeling = document.getElementById("invoerveldAantalKibbeling").value;
aantalViskoekjes = document.getElementById("invoerveldAantalViskoekjes").value;

label1.innerHTML = aantalKibbeling;
label2.innerHTML = aantalViskoekjes;

subPrijsKibbeling = (aantalKibbeling * artikelen[0][1]).toFixed(2);
subPrijsViskoekje = (aantalViskoekjes * artikelen[1][1]).toFixed(2);

prijsKibbeling.innerHTML = subPrijsKibbeling;
prijsViskoekje.innerHTML = subPrijsViskoekje;


totaalPrijs = ((aantalKibbeling * artikelen[0][1]) + (aantalViskoekjes * artikelen[1][1])).toFixed(2);


label3.innerHTML = "€ " + totaalPrijs;
}
[/JS]
 
Is het de bedoeling dat je bij 5 stuks korting geeft op 3 stuks en volle prijs vraagt voor de andere 2 stuks?
 
Is het de bedoeling dat je bij 5 stuks korting geeft op 3 stuks en volle prijs vraagt voor de andere 2 stuks?

Kan begrijpen dat het verwarrend over kan komen, het het bericht aangepast toen ik het postte.

Stel dat je 5 bakjes kibbeling hebt, dan krijg je een korting van 3*0.08 = 0.24.
Als je nog eens 6 viskoekjes hebt, dan krijg je een korting van 6*0.08 = 0.48.
In totaal wordt dus 0.24 + 0.48 = 0.72 van de totaalprijs afgehaald als korting.
 
Bedoel je dit?
Bij elke veelvoud van 3 stuks => per stuk 0.16 Euro korting.

6 kibbeling: 6 * 0.16 = 0.96 Euro korting op subtotaal kibbeling
14 viskoekjes: 12 * 0.16 = 1.92 Euro korting op subtotaal viskoekjes

Zoek eens op
Code:
Math.floor(y/x)
y % x == 0
x > 2
 
Laatst bewerkt:
Code:
//bereken het aantal zonder en het aantal met korting
const kibbelingZonderKorting = aantalKibbeling % 3
const kibbelingMetKorting = aantalKibbeling - kibbelingZonderKorting

const viskoekjesZonderKorting = aantalViskoekjes % 3
const viskoekjesMetKorting = aantalViskoekjes - viskoekjesZonderKorting

//bereken de volle prijzen zonder korting
const kibbelingPrijs = aantalKibbeling * artikelen[0][1]

const viskoekjesPrijs = aantalViskoekjes * artikelen[1][1]

//bereken de korting
const kibbelingKorting = kibbelingMetKorting * 0.08

const viskoekjesKorting = viskoekjesMetKorting * 0.08

//bereken de totaalprijs min de korting
const subPrijsKibbeling = kibbelingPrijs - kibbelingKorting

const subPrijsViskoekjes = viskoekjesPrijs - viskoekjesKorting

//bereken de totalen
let totaleKorting = kibbelingKorting + viskoekjesKorting
totaleKorting = totaleKorting.toFixed(2)

let totalePrijs = subPrijsKibbeling + subPrijsViskoekjes
totalePrijs = totalePrijs.toFixed(2)
 
Just for fun :)
Code:
// alle artikelen
const artikelen = {
    "bakje kibbeling" : 2.38,
    "5 viskoekjes" : 2.49,
    "verse haring" : 1.50,
    "bakje mosselen" : 1.85
}

// winkelwagen
const bestelling = {
    "bakje mosselen" : 11,
    "verse haring" : 7
}

// korting per 3 stuks van 1 artikel
const kortingBedrag = 0.08

// bereken totale korting in winkelwagen
let kortingTotaal  = 0
for (const artikelAantal in bestelling) {
    console.log( Math.floor(bestelling[artikelAantal] / 3) )
    kortingTotaal = kortingTotaal + Math.floor(bestelling[artikelAantal] / 3) * kortingBedrag
}
console.log( kortingTotaal.toFixed(2) )

Je bent het aan het leren dan kan je dit zelf aanpassen om de totaalprijs minus totaalkorting te berekenen ;)

Maak ook eens een uitbreiding zodat je bij elk artikel een eigen kortingsbedrag kan opgeven.
Bijv. kibbeling bij 3 st. 0.07 Euro. en viskoekjes bij 3 st. 0.11 Euro.
 
Laatst bewerkt:
Bedankt allemaal. In combinatie met wat jullie zeggen heb ik zitten sleutelen tot de volgende oplossing:
Code:
kortingKibbeling = (aantalObject.aantalArtikel1/3 - (aantalObject.aantalArtikel1/3)%1); 
	kortingViskoekje = (aantalObject.aantalArtikel2/3 - (aantalObject.aantalArtikel2/3)%1); 
		
	sumDiscount = ((kortingKibbeling + kortingViskoekje) * 3 * 0.08).toFixed(2);

Kan vast efficiënter maar zo ver ben ik nog niet ;)
 
Mooi gedaan.
Als je nu in kortingKibbeling en kortingViskoekje het delen door 3 verwijdert en ipv %1 %3 gebruikt (bij %1 kom je altijd op 0 uit), dan kan je de maal 3 in sumDiscount ook verwijderen.

Code:
kortingKibbeling = (aantalObject.aantalArtikel1 - aantalObject.aantalArtikel1 % 3)
kortingViskoekje = (aantalObject.aantalArtikel2 - aantalObject.aantalArtikel2 % 3)

sumDiscount = ((kortingKibbeling + kortingViskoekje) * 0.08).toFixed(2)
 
Mooi gedaan.
Als je nu in kortingKibbeling en kortingViskoekje het delen door 3 verwijdert en ipv %1 %3 gebruikt (bij %1 kom je altijd op 0 uit), dan kan je de maal 3 in sumDiscount ook verwijderen.

Code:
kortingKibbeling = (aantalObject.aantalArtikel1 - aantalObject.aantalArtikel1 % 3)
kortingViskoekje = (aantalObject.aantalArtikel2 - aantalObject.aantalArtikel2 % 3)

sumDiscount = ((kortingKibbeling + kortingViskoekje) * 0.08).toFixed(2)

Die zag ik nog niet, bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan