【问题标题】:random number js min max随机数 js min max
【发布时间】:2016-11-02 18:33:23
【问题描述】:

我正在尝试从 JavaScript 中的输入中获取 2 个数字之间的随机数。当我输入数字而不是 max.value 和 min.value 时,它​​可以工作,但不能使用变量。我不明白 js 中的 random 是如何工作的,在其他编程语言中我知道它很容易完成,比如 random(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>

【问题讨论】:

标签: javascript html random


【解决方案1】:

我认为问题在于你的输入是 text 并且你随机想要 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);
}

【讨论】:

  • 我刚刚检查过 parseInt() 也存在here
  • @Christoph 为什么你编辑我的帖子而我无法批准或拒绝?
  • 因为我很酷。 :-D 另外,你是第一个得到正确答案的人,所以我只是编辑了你的答案,而不是写另一个内容相同的答案。
  • 当然可以,但为什么我没有选择批准或拒绝编辑?
  • 因为我有权在未经作者同意的情况下编辑内容。 stackoverflow.com/help/privileges
【解决方案2】:

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

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);
}
<input type="text" id="min">
<input type="text" id="max">
<button id="btn" onclick="genRanNumb()">button</button>
<p id="demo"></p>

【讨论】:

    【解决方案3】:

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

    (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】:

      问题是输入元素的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 你对强制的很好解释。对于其余的答案,我会咆哮着以相同的内容给出第四个答案...,)
      【解决方案5】:

      从min到max获取随机数的替代方法

      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));
      

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 2015-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        相关资源
        最近更新 更多