7.You Deserved It!


What is wrong?

Your bill is 3.44, and
Oops, try again. false!

function StaffMember(name,discountPercent){
    this.name = name;
    this.discountPercent = discountPercent;

var sally = new StaffMember("Sally",5);
var bob = new StaffMember("Bob",10);

// Create yourself again as 'me' with a staff discount of 20%
var me = new StaffMember("Dragan", 20);

var cashRegister = {
    lastTransactionAmount: 0,
    add: function(itemCost){
        this.total += (itemCost || 0);
        this.lastTransactionAmount = itemCost;
    scan: function(item,quantity){
        switch (item){
        case "eggs": this.add(0.98 * quantity); break;
        case "milk": this.add(1.23 * quantity); break;
        case "magazine": this.add(4.99 * quantity); break;
        case "chocolate": this.add(0.45 * quantity); break;
        return true;
    voidLastTransaction: function(){
        this.total -= this.lastTransactionAmount;
        this.lastTransactionAmount = 0;
    // Create a new method applyStaffDiscount here
  applyStaffDiscount: function(employee) {
   this.total = this.total - this.total*(100-employee.discountPercent)/100;   

// Apply your staff discount by passing the 'me' object 
// to applyStaffDiscount

// Show the total bill
console.log('Your bill is '+cashRegister.total.toFixed(2));


That error message might be a little mysterious but if you look at the things you "bought" and apply your discount you'll find that the result should be something other than what you're printing


Yes, You are right (result is 13, 74), but I still can't understand why is calculation wrong, and what is wrong in code?


Well you could add more prints so that it shows you what it's doing step by step, allowing you to narrow down which operation isn't what it should be


Instead of:
applyStaffDiscount: function(employee) {
this.total = this.total - this.total*(100-employee.discountPercent)/100;
should be:
applyStaffDiscount: function(employee) {
this.total = this.total*(100-employee.discountPercent)/100;
Result now is correct, but Oops, try again. false is still here. :slight_smile:


Why is it false? What I should do next?


The exercise doesn't account for rounding errors during floating point operations

Add the end of the discount function, add:

this.total = Number(this.total.toFixed(4))

This doesn't improve the accuracy in any way, it's just rounding after all the operations have been carried out


Thank you. This solved the problem :slight_smile:


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.