javascript - 随机数生成器不会使用输入字段中的值生成给定范围内的预期数字
问题描述
我正在尝试在两个给定值之间生成一个随机数。我可以用一个非常标准的小函数来生成它,但是当我尝试通过输入字段设置最大值和最小值时,我得到了一些意想不到的结果。
这是使用 jQuery,这对于此特定功能不是必需的,但对于较大的项目是必需的。
这是我发现的一个例子:
https://jsfiddle.net/u2k41hzd/
function randomNumber(min, max) {
points = Math.floor(Math.random() * (max - min + 1) + min);
}
$( "button" ).on( "click", function ( event ) {
minPoints = $( ".min-points" ).val();
maxPoints = $( ".max-points" ).val();
randomNumber(minPoints, maxPoints);
$(".random").html(points);
});
在最小数字为 1 和最大数字为 6 的情况下,我希望得到介于 1 和 6 之间的数字。但是,我得到介于 0 和 5 之间的数字。
如果最小数字是 2,最大数字是 6,我希望得到 2 到 6 之间的数字,但得到 0 到 4 之间的数字。传入 3 和 6 会得到 0 到 3 之间的数字,依此类推。
忽略输入值并对其进行硬编码似乎可以毫无问题地产生预期结果。本质上,我只是不确定为什么输入值的行为如此。我确定我只是误解了某些东西或在某处犯了错误,但我无法确定原因!
解决方案
问题是您需要添加min
到四舍五入的数字,而不是随机生成的数字:
function randomNumber(min, max) {
points = Math.floor(Math.random() * (max - min + 1)) + min;
}
为了进一步解释,对于 2 和 9 的情况:
- Math.random() 生成一个介于 0 和 0.999999999 之间的数字...
- 最大值 - 最小值 + 1 = 8
- 所以生成的数字将在 8 * 0 和 8 * 0.99999999 范围内...
- 地板将在 [0, 7] 范围内向下舍入
- 结果需要被起始数字偏移(即最小允许数字 - 2)
推荐阅读
- hortonworks-sandbox - HDP 2.6.5 Sandbox 无法从本地访问
- codenameone - 模拟器挂起并且未连接到互联网时不显示任何错误
- hadoop -
- javascript - 带有 combineLatest 的 BehaviorSubject 的奇怪行为
- android - 将 google maps api 添加到 Android Studio 项目会导致 appcompat 出现问题
- android - 将数据提供给其他实际上不起作用的活动
- python-3.x - YouTube Livestream API - 提供标题时需要标题
- ember.js - EmberFire Google 身份验证 - 请查看设置
- java - 以编程方式选择指定项目时如何更改 RecyclerView 中项目的属性?
- python - 使用 superclass.__init()__ 而不是 superclass() 调用超类构造函数的原因