随机数js min max

时间:2016-06-30 15:01:29

标签: javascript html random

我正在尝试在JavaScript中输入两个数字之间的随机数。当我输入数字而不是max.value和min.value时,它可以工作,但不能用变量。我无法理解js中的随机是如何工作的,在其他编程语言中我知道它很容易就像随机(min,max)这样我完全不明白为什么它在JS中如此难以理解。谢谢。

function genRanNumb() {
  document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max.value-min.value+1)+min.value);
}
<input type="text" id="min">
<input type="text" id="max">
<button id="btn" onclick="genRanNumb()">button</button>
<p id="demo"></p>

5 个答案:

答案 0 :(得分:3)

问题是输入元素的value始终是字符串。当您编写max.value - min.value时,由于减法运算符,JavaScript会将值强制转换为数字。但是当您撰写0.3 + "8"时,结果为"0.38"而不是"8.3"。这就是原始代码给出奇怪值的原因,max.value永远不会被添加但是附加。 以下是如何修复它的可能性:首先使用公式+运算符(或使用parseInt)将字符串强制转换为数字:

function genRanNumb() {
  var vMin = +min.value;
  var vMax = +max.value;
  var generated = Math.floor(Math.random()*(vMax - vMin + 1) + vMin);
  demo.innerText = generated;
}
<input type="text" id="min">
<input type="text" id="max">
<button id="btn" onclick="genRanNumb()">button</button>
<p id="demo"></p>

答案 1 :(得分:1)

我认为问题是您的输入是文本并且您的随机需要 int 值 解决方案是在javascript中使用parseFloat(yourvariable)来填充您的变量 在你的情况下,你有:

function genRanNumb() {
  document.getElementById('demo').innerHTML=Math.floor(Math.random()*(parseFloat(max.value)-parseFloat(min.value)+1)+parseFloat(min.value));
}

希望它回答你的问题。

为了更好的可读性和最佳兼容性,您应该这样写:

function genRanNumb() {
  var max = parseFloat(document.getElementById("max").value,10),
      min = parseFloat(document.getElementById("min").value,10);

  document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max-min+1)+min);
}

答案 2 :(得分:0)

您的随机数逻辑是正确的。您只需要从文本框中检索值,这些值是字符串,然后将它们解析为整数。

&#13;
&#13;
function genRanNumb() {
  var min = parseInt(document.getElementById('min').value, 10);
  var max = parseInt(document.getElementById('max').value, 10);
  document.getElementById('demo').innerHTML=Math.floor(Math.random()*(max-min+1)+min);
}
&#13;
<input type="text" id="min">
<input type="text" id="max">
<button id="btn" onclick="genRanNumb()">button</button>
<p id="demo"></p>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

问题是你的值是字符串所以当你这样做时:

(max.value-min.value+1)+(min.value)

它喜欢做,例如,6" + "5"所以"65"

所以试试吧:

 <script>
   function genRanNumb() {
     document.getElementById('demo').innerHTML=Math.floor(Math.random()*(parseInt(max.value-min.value+1))+parseInt(min.value));
   }

</script>

答案 4 :(得分:0)

或者选择从最小到最大的随机数

let makeGuess = function(guess){
    let min = 1;
    let max = 5;   
    let randomNumber = Math.floor(Math.random() * (max - min + 1)) + min

    return guess === randomNumber;

}
console.log(makeGuess(1));