Search code examples
javascriptfloor

Javascript - Math.floor does not work


I know there are more of the "Math.floor not working" questions, but I didn't found my answer there, so that's why I made this question.

I am making a simple algorithm which is looking for your number by jumping in between the range. So for example, range = 100, number = 60. It will go to 50, see it's higher, so the range is 50 - 100. then it jumps to 75 to see if it's either bigger or smaller, and so on until it found the right number.

To make this a bit more clear, I thought: "I'll round them downwards by using Math.floor." But for some reason it doesn't work.

My code:

var guessTheNumber = function() {

  var validNumber = false; // Geldig nummer = niet waar
  var userNumberHTML = document.getElementById("userNumberHTML"); // Noem HTML element met ID "userNumberHTML" "userNumberHTML"
  var guessedNumbers = document.getElementById("guessedNumbers"); // noem HTML element met ID "guessedNumbers" "guessedNumbers"
  guessedNumbers.innerHTML = "Guessed number(s): ";
  var minNumber = 0; // Minimum wat mensen kunnen invullen
  var maxNumber = 100; // Maximum wat mensen kunnen invullen
  var userNumber = prompt("Tell me a number between 0 and 100, including those (numbers with decimals will be rounded downwards)."); // Vraag gebruiker welk nummer
  userNumber = Math.floor(userNumber); // Nummer wordt naar beneden afgerond
  var counter = 1;
  var result = 0;
  var q = 1;

  if (userNumber >= minNumber && userNumber <= maxNumber) { // Als het een getal is groter of gelijk aan 1 en kleiner of gelijk aan 100
    userNumberHTML.innerHTML = "Your number: " + userNumber; // Geef "x" in HTML de waarde van "userNumber", namelijk het genoemde getal
  } else { // Anders
    while (validNumber == false) { // Zolang validNumber NIET waar is
      userNumber = prompt("This is not a number between 0 and 100. Try again."); // wordt "userNumber" de waarde van de nieuwe prompt
      if (userNumber >= 1 && userNumber <= 100) { // Als het een getal is groter of gelijk aan 1 en kleiner of gelijk aan 100
        userNumberHTML.innerHTML = "Your number: " + userNumber; // Geef "x" in HTML de waarde van "userNumber", namelijk het zojuist genoemde getal
        validNumber = true; // Zet validNumber op WEL waar
      }
    }
  }

  result = (minNumber + maxNumber) / 2;
  Math.floor(result);
  guessedNumbers.innerHTML += result + ", ";

  while (result != userNumber) {
    if (result < userNumber) {
      Math.floor(result);
      minNumber = result;
    } else {
      Math.floor(result);
      maxNumber = result;
    }
    result = (minNumber + maxNumber) / 2;
    guessedNumbers.innerHTML += result + ", ";
    q++;
  }

  guessedNumbers.innerHTML += "and there you go!";
  alert("The PC guessed your number in " + q + " times!");
  if (confirm("Try again?")) {
    guessedNumbers.innerHTML = "Guessed number(s): ";
    guessTheNumber();
  }
}
<!DOCTYPE html>
<html>

<head>
  <title>JS test</title>
</head>

<body>
  <button onclick="guessTheNumber()" style="height: 100px; width: 200px;">Let the Computer find your number!</button>
  <p id="userNumberHTML">Your number: </p>
  <p id="guessedNumbers">Guessed number(s): </p>
  <p id="TEST"></p>

  <!-- SCRIPTS -->
  <!-- <script type="text/javascript" src="guessTheNumber.js"></script> -->
  <script type="text/javascript" src="test.js"></script>
</body>

</html>

I do really not know what I am doing wrong, since the user input does Math.floor like it should! Any help is appreciated :)

Thanks in advance,
Brent


Solution

  • Math.floor(result) returns the result, so you have to use:

    result = Math.floor(result);