Math.random()Javascript-百分比和权重

Math.random()Javascript-百分比和权重,javascript,math,ecmascript-6,percentage,Javascript,Math,Ecmascript 6,Percentage,我有一个问题,我需要有一个百分比的通话记录,系统不允许只是设置。所以在我的代码中,我需要计算它,然后说20%不记录 有人建议使用Math.Random()函数来实现这一点,但我看不出随机数是如何生成的 因此: 我只是不知道每100个电话中这个数字会如何平衡,它能在100个电话中产生两次相同的号码吗?或者它能工作到100然后重新开始吗?每当我需要基于固定概率发生某事时,我通常处理0到1之间的浮点,这与Math.random()输出随机值的方式相同 我已经重新编写了您的程序以适应概率,但是如果您愿意

我有一个问题,我需要有一个百分比的通话记录,系统不允许只是设置。所以在我的代码中,我需要计算它,然后说20%不记录

有人建议使用Math.Random()函数来实现这一点,但我看不出随机数是如何生成的

因此:


我只是不知道每100个电话中这个数字会如何平衡,它能在100个电话中产生两次相同的号码吗?或者它能工作到100然后重新开始吗?

每当我需要基于固定概率发生某事时,我通常处理0到1之间的浮点,这与
Math.random()输出随机值的方式相同

我已经重新编写了您的程序以适应概率,但是如果您愿意,使用百分比并没有什么错。我只是觉得乘以100没有多大用处,也不会让程序更可读(至少对我来说)

我很久以前看过一段精彩的视频,描述了这个概念


上面的代码可以工作,并且大多数情况下,
disable_recording()
不会被调用,因为很可能,
random()
函数将输出小于0.8的值。但偶尔(20%的时间)会调用该函数

每当我需要基于固定概率发生某件事时,我通常会处理介于0和1之间的浮点,这与
Math.random()
输出随机值的方式相同

我已经重新编写了您的程序以适应概率,但是如果您愿意,使用百分比并没有什么错。我只是觉得乘以100没有多大用处,也不会让程序更可读(至少对我来说)

我很久以前看过一段精彩的视频,描述了这个概念


上面的代码可以工作,并且大多数情况下,
disable_recording()
不会被调用,因为很可能,
random()
函数将输出小于0.8的值。但偶尔(20%的时间)会调用该函数

您能否向我们展示更广泛的代码上下文和示例输入以及所需的输出?您可以预期范围为[0..100]的随机数。如果您从生成器中选取100个样本,那么您(a)必须期望重复,并且(2)不能期望看到结果中范围内的每个数字。一般来说,这应该是可行的,但是大多数随机生成器如果用于更大次数的尝试或调用,则效果最好。它应该是平衡的。你能给我们展示更广泛的代码上下文和示例输入以及所需的输出吗?你可以预期范围为[0..100]的随机数。如果您从生成器中选取100个样本,那么您(a)必须期望重复,并且(2)不能期望看到结果中范围内的每个数字。一般来说,这应该是可行的,但是大多数随机生成器如果用于更大次数的尝试或调用,则效果最好。它应该是平衡的。我要试试这个。看看它是如何用0-1得到结果的,使用更大的范围让我担心。我会做一些测试。谢谢everyone@RussellHeaney乘以常数并不是一个真正的问题
0.8*100>x*100
0.8>x
对于
x
的任何值都会有相同的结果。虽然乘法不是真正相关的。这样做的唯一原因是,如果你从用户那里得到百分比(例如,配置或其他),在这种情况下,人们为
80%
键入
80
更为自然,即使
0.8
表达了完全相同的想法。我将尝试一下。看看它是如何用0-1得到结果的,使用更大的范围让我担心。我会做一些测试。谢谢everyone@RussellHeaney乘以常数并不是一个真正的问题
0.8*100>x*100
0.8>x
对于
x
的任何值都会有相同的结果。虽然乘法不是真正相关的。这样做的唯一原因是如果你从用户那里得到百分比(例如,配置或其他),在这种情况下,人们为
80%
键入
80%
更为自然,即使
0.8
表达了完全相同的想法。
var desiredrecordpercentage = 80

var percentageCheck = Math.random()*100;
if (percentageCheck >= desiredrecordpercentage){

    disable recording;

}
var desiredRecord = 0.8;   // 1: record everything, 
                           // 0: record nothing

var check = Math.random();  // check will be anywhere between 0 and 1

if (check > desiredRecord) { // will be true if check is between 0.81 and 0.99
                             // but false if check is below 0.8 
                             // which is more probable since 80 is the
                             // majority or the percentile

    disable_recording();

}