JavaScript 加权随机或百分比时间

dzm*_*dzm 2 javascript random node.js weighted

我有一个每 100 毫秒运行一次的 Node.js 进程 (setInterval)。我想每隔 x 时间段执行某些操作。例如,2% 的时间做 X,10% 的时间做 Y,等等。

\n\n

现在,我基本上是这样做的:

\n\n
var rand = Math.floor(Math.random() * (1000 + 1));\n\nif(rand > 900) {  // Do something }\n\nif(rand > 950) {  // Do something }\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是它非常不一致。您希望if(rand > 900)至少有接近 10% 的时间,但有时可能连续 10 倍或根本没有。

\n\n

如果我们假设 100 毫秒间隔是固定的,有人会建议更好的解决方案吗?该解决方案会更准确。

\n\n

谢谢你!

\n\n

编辑:根据Dredel博士的评论:

\n\n
var count = 0;\nsetInterval(function(){\n\n    if(count++ % 4 == 0) {\n       console.log('25% of the time');\n    }\n\n}, 100);\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

Gen*_* S. 5

如果你的间隔是固定的,我会将你的邮票四舍五入到最接近的百位,然后使用与你的需求相关的那些部分...... 100和200而不是300-1000来代表2%。

如果您可以使用计数器,那么这是更明显的方法。

if(myCounter++ % 4 == 0)
    //this happens 25 percent of the time 
Run Code Online (Sandbox Code Playgroud)

正如埃米尔指出的那样,概率在这里并不是正确的方法,而且我不觉得你已经与它结婚了......听起来你正在使用它,因为你没有看到更好的方法来激怒x% 的时间会发生某事。如果我们误解了您的意思,您需要更详细地解释为什么在这里使用赔率。