-1

I don't know why the if-else statement given in the question is function incorrectly. Even cashProvided.value >billAmount.value I keep getting the errorMsg which is being executed in the else statement. I tried using console.log() at different parts of my code to see where I'm going wrong but I am not quite able to figure it out myself.Any suggestion?enter image description here

const billAmount=document.querySelector("#bill-amount");
const cashProvided=document.querySelector("#cash-given");
const checkButton=document.querySelector("#Check");
const numberOfNotes=document.querySelectorAll(".no-of-notes");
const errorMsg=document.querySelector("#error-msg");
checkButton.addEventListener("click",clickHandler);
notes=[2000,500,100,20,10,5,1];

if(cashProvided.value >= billAmount.value)
        {
            console.log("inside if");
            console.log('Bill='+billAmount.value);
            console.log("Cash Provided="+cashProvided.value);
            var change=cashProvided.value-billAmount.value;
            console.log("Change="+change)
            for(i=0;i<notes.length;i++)
            {
                console.log(notes.length);
                console.log("entered for");
                var numOfNotes=Math.trunc(change/notes[i]);
                numberOfNotes[i].innerText=numOfNotes;
                change%=notes[i];
                console.log("new change "+change);
            }
        }
        else
        {
            console.log(billAmount.value);
            console.log(cashProvided.value);
            errorMsg.style.display="block";
            errorMsg.innerText="You want to wash plates or what? Gimme atleast "+billAmount.value;
        }
  • have you tried to parse the values into integers JavaScript is weird with numbers and strings – net-js May 26 '22 at 08:30
  • maybe you didn't "catch" the element with queryselector and thus have undefined in the if. Check the values with console log before the if (values for cashProvided and billAmount) – Jacck Mark May 26 '22 at 08:34
  • add a console.log(cashProvided.value - billAmount.value) before if statement. And see what prints in the console. – Md Wahidul Azam May 26 '22 at 08:34

2 Answers2

2

Values are coming as string. you should parse the value first.

second way: if(parseInt(cashProvided.value, 10) >= parseInt(billAmount.value, 10))

also you can set them as variables outside of the if statement.

Edit: in response for peter's comment. you should include a second argument intuo parseInt function. it will determine the base. i assume you are using 10 base.

Elna Haim
  • 545
  • 1
  • 5
  • 19
-1

The type of input's value is String, you need to parse it to integer or number first.

const cash = parseInt(cashProvided.value);
const bill = parseInt(billAmount.value);
//use cash and bill instead of cashProvided.value, billAmount.value
...
Taurz
  • 388
  • 2
  • 6
  • The downvote is for having omitted the 2nd parameter of [`parseInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#parameters) which is a cause for many wrong calculations. – Peter Seliger May 26 '22 at 09:05
  • Thank you @PeterSeliger, i edited my answer. according to your suggestion. – Elna Haim May 26 '22 at 09:12