我正在尝试在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>
答案 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)
您的随机数逻辑是正确的。您只需要从文本框中检索值,这些值是字符串,然后将它们解析为整数。
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;
答案 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));